.Net Core3.1下Autofac的使用
生活随笔
收集整理的這篇文章主要介紹了
.Net Core3.1下Autofac的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
安裝Autofac.Extensions.DependencyInjection包
在programe.cs下
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args)//改用Autofac來實現(xiàn)依賴注入.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});主要是這句代碼
? ? ? ? ? ? ? ? //改用Autofac來實現(xiàn)依賴注入
? ? ? ? ? ? ? ? .UseServiceProviderFactory(new AutofacServiceProviderFactory())
在StartUp中增加
//autofac 新增public void ConfigureContainer(ContainerBuilder builder){//直接用Autofac注冊我們自定義的//builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope().AsImplementedInterfaces();builder.RegisterModule(new AutofacConfig());}我的AutofacConfig類如下
public class AutofacConfig : Autofac.Module {protected override void Load(ContainerBuilder builder) {//base.Load(builder);//重寫Autofac管道中的Load方法,在這里注入注冊的內(nèi)容//builder.RegisterType<ServiceA>().As<IServiceA>().InstancePerLifetimeScope();//以程序集形式注冊//獲取以My開頭的dll程序集的集合利用Directory.GetFiles獲取dll,利用Assembly.LoadFrom委托select來對剛才的每個dll文件進行獲取集合Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "My*.dll").Select(Assembly.LoadFrom).ToArray();//注冊所有實現(xiàn)了 IDependency 接口的類型Type baseType = typeof(IDependency);builder.RegisterAssemblyTypes(assemblies).Where(b => !b.IsAbstract && baseType.IsAssignableFrom(b))//IsAssignableFrom是否實現(xiàn)了基類的接口這里指的是IDependency.AsSelf().AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();//Castle AOPbuilder.Register(c => new TranscationAop());//注冊AspectCorebuilder.RegisterDynamicProxy();//builder.RegisterType<DocTypeCache>().AsImplementedInterfaces().Named<ICacheData>("DocTypeCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();builder.RegisterType<DepCache>().AsImplementedInterfaces().Named<ICacheData>("DepCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();builder.RegisterType<UserCache>().AsImplementedInterfaces().Named<ICacheData>("UserCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();//注冊系統(tǒng)所有Controller,由Autofac創(chuàng)建//var IControllerType = typeof(ControllerBase);//builder.RegisterAssemblyTypes(assemblies).Where(t =>// IControllerType.IsAssignableFrom(t) && t != IControllerType).PropertiesAutowired();// var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()//.Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();// builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();// builder.RegisterType<SysMenuService>().As<ISysMenuService>().PropertiesAutowired().InstancePerLifetimeScope();//注冊所有控制器//autofac來實現(xiàn)屬性注入var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();}}如果要屬性注入則在StartUp中? ? ? ? public void ConfigureServices(IServiceCollection services)
加入
services.AddControllersAsServices() //use by property DI
總結
以上是生活随笔為你收集整理的.Net Core3.1下Autofac的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: B - Shuffle Hashing
- 下一篇: WPF实现地震波警示效果