1、由于.net core内置IOC容器类IServiceCollection,使用Autofac需要先替换容器,初始化Autofac的工厂类(Program.cs)
//替换容器,初始化一个Autofac的新实例
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
2、注册Autofac的容器,第三方容器统一ConfigureContainer调用,并在里面添加需要的服务
(注:PropertiesAutowired是对服务的属性注入,很实用,建议每个Service都加上)
//注册Autofac的容器,第三方容器统一ConfigureContainer调用
//并在里面添加需要的服务
builder.Host.ConfigureContainer<ContainerBuilder>(builder => {
builder.RegisterType<UserService>().As<IUserService>()
.InstancePerLifetimeScope()
.PropertiesAutowired();
});
3、完成后即可在Controller里使用
[Route("[controller]")]
public class TestController : Controller
{
private readonly IUserService _userService;
public TestController( IUserService userService)
{
_userService = userService;
}
特别注意:
Autofac相当于是重新替换了.net core里的IOC容器,之前已经通过IServiceConllection注册的服务不需要再通过Autofac重新注册,Autofac会自动继承,但由于IServiceCollection没有属性注入功能,因此Autofac也不会新写,建议统一用一个IOC容器。