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(); })
            .UseServiceProviderFactory(new AutofacServiceProviderFactory());

 

三、StarpUp.cs中添加方法

 public void ConfigureContainer(ContainerBuilder builder)
        {
            //
        }

比如:

 public void ConfigureContainer(ContainerBuilder builder)
        {
            builder.RegisterModule();
        }
四、AutomaticInjectionModule的具体内容如下:
 /// 
    /// 自动注入
    /// 
    public class AutomaticInjectionModule : Module
    {
        /// 
        ///
        /// 
        /// 
        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分别是代表三个生命周期的接口



你可能感兴趣的:(net core 3.x使用Autofac以及使用Autofac进行自动注入)