• net core 3.x使用Autofac以及使用Autofac进行自动注入


    一、需要引入的库:

    Autofac

    Autofac.Extensions.DependencyInjection

    二、Program.cs中添加:.UseServiceProviderFactory(new AutofacServiceProviderFactory())。如下:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
                .UseServiceProviderFactory(new AutofacServiceProviderFactory());

    三、StarpUp.cs中添加方法

     public void ConfigureContainer(ContainerBuilder builder)
            {
                //
            }

    比如:

     public void ConfigureContainer(ContainerBuilder builder)
            {
                builder.RegisterModule<AutomaticInjectionModule>();
            }
    四、AutomaticInjectionModule的具体内容如下:
     /// <summary>
        /// 自动注入
        /// </summary>
        public class AutomaticInjectionModule : Module
        {
            /// <summary>
            ///
            /// </summary>
            /// <param name="moduleBuilder"></param>
            protected override void Load(ContainerBuilder moduleBuilder)
            {
                var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToArray();
                var perRequestType = typeof(IScoped);
                moduleBuilder.RegisterAssemblyTypes(assemblys)
                    .Where(t => perRequestType.IsAssignableFrom(t) && t != perRequestType)
                    .PropertiesAutowired()
                    .AsImplementedInterfaces()
                    .InstancePerLifetimeScope();
    
                var perDependencyType = typeof(ITransient);
                moduleBuilder.RegisterAssemblyTypes(assemblys)
                    .Where(t => perDependencyType.IsAssignableFrom(t) && t != perDependencyType)
                    .PropertiesAutowired()
                    .AsImplementedInterfaces()
                    .InstancePerDependency();
    
                var singleInstanceType = typeof(ISingleton);
                moduleBuilder.RegisterAssemblyTypes(assemblys)
                    .Where(t => singleInstanceType.IsAssignableFrom(t) && t != singleInstanceType)
                    .PropertiesAutowired()
                    .AsImplementedInterfaces()
                    .SingleInstance();
            }
    
        }

    以上 ITransient、ISingleton、IScoped分别是代表三个生命周期的接口



  • 相关阅读:
    052_from表单的两种请求方式
    051_ajax的两种请求方式与传递流
    050_SpringMVC配置文件解析器
    049_文件下载为什么只能使用同步请求?
    048_io流
    048_get与url的编码问题
    062_什么是http协议?什么又是三次握手?
    020_全选功能无法出现统一协调时
    064_js中function怎么才能有返回值呢?
    Kali单用户模式下重置登录口令教程
  • 原文地址:https://www.cnblogs.com/dayang12525/p/12943765.html
Copyright © 2020-2023  润新知