netcore 集成autofac 或者集成Scrutor 实现程序集类型 批量 注入_scrutor注入配置类configmanager-程序员宅基地

技术标签: C#  .net  

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()
            );
        }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/greenwaves3000/article/details/109853698

智能推荐

输入错的单词,寻找正确的单词-程序员宅基地

文章浏览阅读180次。步骤:假如集合c中的单词为:apple,app计算p-----p(apple)和p(app),求apple和app在文章中出现的频次假如用户输入的单词是appl,求最有可能成为正确的字符串是哪一个(apple or app)p(appl/apple)*p(apple) 和 p(appl/app)*p(app)...

捋一捋PDF、PMF、CDF是什么-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏10次。总第230篇/张俊红还记得前段时间看过一篇文章,就是调查大家疫情期间都干了什么,有一条是疫情期间终于弄清楚了PDF和CDF的区别。PDF、PMF、CDF这几个概念确实很容易混淆。今天就来..._cdf曲线 怎么看

购物车实现逻辑_{ "code": 0, "data": [ { "childlist": [ { "groupid-程序员宅基地

文章浏览阅读428次。购物车bean类public class MyShoppingCarBean { /** * msg : 请求成功 * code : 0 * data : [{"list":[{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com._{ "code": 0, "data": [ { "childlist": [ { "groupid": 0, "id": 0, "localclass

mix3信号测试软件,同样是旗舰,小米MIX3信号比iPhone强太多!-程序员宅基地

文章浏览阅读307次。原标题:同样是旗舰,小米MIX3信号比iPhone强太多!前段时间苹果和小米都不约而同的发布了自己的年终当家旗舰——小米MIX3和iPhoneXS系列,两款手机在市场上都反响热烈,虽然都是定位的高端旗舰但两者价格相差的的确很大,价格的差距并不能直接说明日常使用体验时的感受。 话说回来一部手机的基础功能就是拨打电话和上网冲浪,而要体现出一部手机的基本功扎实与否信号就体现的尤为关键了,而近日有人将小米..._小米mix3gps接受信号怎么样

CentOS环境下使用javaCV_org.bytedeco.javacv 怎么打包在linux使用-程序员宅基地

文章浏览阅读3.9k次。最近一直搞计算机视觉,需要在linux环境下使用javaCV,感觉linux环境下使用javaCV还是很费劲的,可能是基础太差吧。在Windows上运行的程序,放到linux上就很难运行起来,还是怀念纯纯的java开发啊,主要说说遇到的一些问题吧。自己写了一个简单的小程序,用来提取图片中的SIFT描述子(当然是模仿的别人的)。import org.bytedeco.javacpp.openc_org.bytedeco.javacv 怎么打包在linux使用

c语言:有4个圆塔,已知圆心和半径,塔以外无建筑物。输入任一点坐标,求该点的建筑高度_有4个圆塔c语言-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏26次。有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)解:程序:#includeint main(){ int h=10; float x1 = 2, y1 = 2, x2 = -2, y2 = 2, x3 = -2, y3 = -2, x4 = 2, y4 = -2,_有4个圆塔c语言

随便推点

乐高ev3搭建图_乐高EV3摩天轮搭建说明,适合摆在前台吸引小朋友-程序员宅基地

文章浏览阅读1.4k次。“长莺飞二月天,拂堤杨柳醉春烟。儿童散学归来早,忙趁东风放纸鸢。”又是一年春好处,又到了出门踏青游玩的好季节啦!可惜今年由于新冠肺炎的影响,大家都在家里隔离等待着旅游景区、游乐场的开放吧。这不,我们为你带来了独家制作的“摩天轮”,还不赶快跟着小编去一睹容颜吗?看,我们的摩天轮已经转起来啦,是不是很酷炫呢~其实啊,搭建摩天轮真的非常的简单,不信?接着往下看呀!现在展示的呢,就是我们的转轮,它支撑着我..._乐高ev3摩天轮

在maven中使用第三方库_maven 变量第一个字母变大写的-程序员宅基地

文章浏览阅读2.2k次。需求描述给定一个字符串,将字符串的首字母转换成大写。实现方法可以由多种实现方法。1:使用java中String类的substring方法和toUpperCase方法。取出字符串的第一个字符,将其转换成大写,然后拼接上后面的字符。2:使用第三方类库中的方法。本文档主要介绍在maven工程中使用第三方类库的方法来实现需求。apache的common库中有个StringUti_maven 变量第一个字母变大写的

python列表元素修改_Python 列表修改元素以及列表方法-程序员宅基地

文章浏览阅读2.7k次。1.修改元素# 创建一个列表stus = ['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']# print("修改前:",stus)# 修改列表中的元素# 直接通过索引来修改元素stus[0] = 'sunwukong'stus[2] = '哈哈'# 通过del来删除元素del stus[2] # 删除索引为2的元素# print('修改后:',stus)stus = ['孙..._列表修改元素

R语言中的 "Error in gzfile(file, "wb") :cannot open the connection" 异常处理总结_error in gzfile(file, "wb") : cannot open the conn-程序员宅基地

文章浏览阅读5.6w次,点赞10次,收藏27次。R语言中的 "Error in gzfile(file, "wb") :cannot open the connection" 异常处理总结最近学R语言做数据分析时,遇到到一个很让人头疼的问题,reshape2 包下载好了,但 Rstudio 运行后,就报出下面的红色报错异常, 说是打不开链接,画图渲染异常。具体情况如下:> par(mfrow = c(length(colors(_error in gzfile(file, "wb") : cannot open the connection in addition: warnin

Unity UGUI Text背景适应文字,多层排版的时候Parent has a type of layout group component-程序员宅基地

文章浏览阅读4.7k次,点赞7次,收藏9次。在使用Text 和 Content Size Fitter 还有Layout进行布局的时候,如果设计到多承嵌套往往会懵逼,比如我们需要做一套向下面的UI最外面有排序,Content里面的Text 内容不确定,需要自适应。这时候很容向到的预制体方案是Scroll View--Viewport----Content [Content Size Fitter] Vertical Fit: Preferred Size [Vertical Layout Group] _parent has a type of layout

mysql双主互备-程序员宅基地

文章浏览阅读152次。mysql主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave),备服务器从主服务器同步数据,完成数据的备份。【异步同步】前提:2台服务器,主 192.168.1.101 备 192.168.1.1021.首先主 备 服务的mysql配置的server的id必须不同,server_id是为了..._mysql双主相互备份

推荐文章

热门文章

相关标签