1、为什么使用Autofac替换DI 容器
1)、Autofac高性能(使用构造的类越多,性能越好)
2)、使用方式多样
a、类型创建RegisterType
builder.RegisterType<AutoFacManager>(); builder.RegisterType<Worker>().As<IPerson>();
b、实例创建
builder.RegisterInstance(MySingleton.GetInstance()).ExternallyOwned();
c、Lambda表达式创建
builder.Register(c => new AutoFacManager(c.Resolve<IPerson>())); builder.RegisterType<Worker>().As<IPerson>();
d、程序集创建
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()); builder.RegisterType<Worker>().As<IPerson>();
e、泛型注册
builder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>)).InstancePerLifetimeScope(); using (IContainer container = builder.Build()) { IList<string> ListString = container.Resolve<IList<string>>(); }
f、默认的注册
ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<AutoFacManager>(); builder.RegisterType<Worker>().As<IPerson>(); builder.RegisterType<Student>().As<IPerson>().PreserveExistingDefaults(); using (IContainer container = builder.Build()) { AutoFacManager manager = container.Resolve<AutoFacManager>(); manager.Say(); //输出我是一个工人 }
2、替换步骤
1)、使用vs2017生成.net core 项目
2)、找到Startup.cs
3)、调整ConfigureServices方法,把void设置返回值IServiceProvider,在最后增加代码如下:
var builder = new ContainerBuilder();//实例化 AutoFac 容器 builder.Populate(services); builder.RegisterType(typeof(MemoryCacheService)).As(typeof(ICacheService));//增加配制 ApplicationContainer = builder.Build(); return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管 core内置DI容器
4)、运行项目无错即成功!