.Net Core3.1下Autofac的使用

安装Autofac.Extensions.DependencyInjection包

在programe.cs下

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                //改用Autofac来实现依赖注入
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

主要是这句代码

                //改用Autofac来实现依赖注入
                .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方法,在这里注入注册的内容
            //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();
            //注册所有实现了 IDependency 接口的类型
            Type baseType = typeof(IDependency);

            builder.RegisterAssemblyTypes(assemblies)
                .Where(b => !b.IsAbstract && baseType.IsAssignableFrom(b))//IsAssignableFrom是否实现了基类的接口这里指的是IDependency
                .AsSelf().AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();

            //Castle AOP
            builder.Register(c => new TranscationAop());

            //注册AspectCore
            builder.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();


            //注册系统所有Controller,由Autofac创建
            //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来实现属性注入
            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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值