netcore 集成autofac 或者集成Scrutor 实现程序集类型 批量 注入

wpf,console类程序,集成


        public static void Run()
        {
            var serviceP = new ServiceCollection().AddTransient<A>();

            var autoContainer = new ContainerBuilder();
            autoContainer.Populate(serviceP);
            autoContainer.RegisterType<AInAutoFac>();

            var container = autoContainer.Build();

            var ss = new AutofacServiceProvider(container);

            var a1 = ss.GetService<A>();
            var a2 = ss.GetService<A>();
        }


        class A
        { }

        class AInAutoFac
        {

        }
         public class Base
        {
            public Base()
            {
                Console.WriteLine($"Created:{GetType().Name}");
            }

        }
        public interface IAccount { }
        public interface IMessage { }
        public interface ITool { }
        public class Account : Base, IAccount { }
        public class Message : Base, IMessage { }

        public class Tool : Base, ITool { }
        
 		public static void Run()
        {
            var serviceCollection = new ServiceCollection()
                .AddTransient<ITool, Tool>();

            var containerBuilder = new ContainerBuilder();

            containerBuilder.Populate(serviceCollection);
            // 属性注入
            containerBuilder.RegisterType<Test>().As<ITest>().PropertiesAutowired();
            // 程序集注入
            containerBuilder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                // 筛选基类为Base
                .Where(t => t.BaseType == typeof(Base))
                // 暴露第一个接口
                .As(t => t.GetInterfaces()[0])
                // 生命周期模式为Scope
                .InstancePerLifetimeScope();

            var container = containerBuilder.Build();
            IServiceProvider provider = new AutofacServiceProvider(container);
            
            Debug.Assert(provider.GetService<IAccount>() is Account);
            Debug.Assert(provider.GetService<IMessage>() is Message);
            Debug.Assert(provider.GetService<ITool>() is Tool);

            var test = provider.GetService<ITest>();
            Debug.Assert(test.Message is Message);
            Console.Read();
        }

Aspnet core 集成autofac

使用autofac工厂


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

Startup 里面添加容器配置

    public void ConfigureContainer(ContainerBuilder builder)
        {
            var assembly = Assembly.GetExecutingAssembly();
            // 程序集注册
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                // 筛选命名空间为 Services
                .Where(t => t.Namespace == assembly.GetName().Name + ".Services")
                // 暴露注册类型的接口
                .AsImplementedInterfaces()
                // 生命周期模式为Scope
                .InstancePerLifetimeScope();
        }

Aspnet core 集成Scrutor

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.Scan(scan => scan
                .FromAssemblyOf<Startup>()
                .AddClasses(classes =>
                    classes.Where(t => t.Name.EndsWith("Service", StringComparison.OrdinalIgnoreCase)))
                .UsingRegistrationStrategy(RegistrationStrategy.Throw)
                .AsMatchingInterface()
                .WithScopedLifetime()
            );
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值