参考
.net中优秀依赖注入框架Autofac看一篇就够了 - 知乎 (zhihu.com)
ASP.NET Core 6.0 关于Autofac 使用 - 芦荟柚子茶 - 博客园 (cnblogs.com)
环境搭建
参考:.NET 依赖注入Autofac - 掘金 (juejin.cn)
多种注册方式
注册接口和实现类
定义接口和实现类
注册ioc
// 指定provider的工厂为AutofacServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(ConfigurationBinder =>
{
// 注册ioc
ConfigurationBinder.RegisterType<MyService>().As<IMyService>();
});
使用
直接注册实现类
注册ioc
// 指定provider的工厂为AutofacServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(ConfigurationBinder =>
{
// 注册ioc
ConfigurationBinder.RegisterInstance(new MyService());
});
使用
属性注入
注册ioc
// 指定provider的工厂为AutofacServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(ConfigurationBinder =>
{
// 注册ioc
// ConfigurationBinder.RegisterType<MyService>().As<IMyService>();
ConfigurationBinder.RegisterInstance(new MyService());
// 注册每个控制器和抽象之间的关系
var controllerBaseType = typeof(ControllerBase);
ConfigurationBinder.RegisterAssemblyTypes(typeof(Program).Assembly)
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
.PropertiesAutowired();
});
{
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
}