服务激活工具 ActivatorUtilities

摘要:
ActivatorUtilities的官方链接https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.dependencyinjection.activatorutilities?view=dotnet-Plat-ext-3.0在某些服务不方便进行依赖注入时使用,例如publicSome(serviceAa,ServiceBb
ActivatorUtilities

官方链接

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.dependencyinjection.activatorutilities?view=dotnet-plat-ext-3.0

作用

当某些服务不方便依赖注入时使用
比如: public Some(serviceA a,ServiceB b,int c)
如上诉方法,c为int时,并不好注入。此时就可以使用ActivatorUtilities 辅助实例化。
ActivatorUtilities 需要一个服务提供者,比如已经注入了serviceA,合serviceB,则在CreateInstance时,只需要补充参数c的值即可。
即:ActivatorUtilities.CreateInstance(serviceProvider,1);

代码示例

如果参数ServiceProvider无法提供,将会从参数列表中依次获取。

    public class Program
    {
        public static void Main()
        {
            ServiceCollection serviceDescriptors = new();
            var pr = serviceDescriptors.AddScoped<ServiceA>().BuildServiceProvider();
            var serviceB = ActivatorUtilities.CreateInstance<ServiceB>(pr, TypeEn.A);
            serviceB.ShowType();

            serviceB = ActivatorUtilities.CreateInstance<ServiceB>(pr, TypeEn.B);
            serviceB.ShowType();
        }


        public enum TypeEn
        {
            A,
            B
        }

        public class ServiceA
        {
        }

        public class ServiceB
        {
            public TypeEn Type { get; set; }
            public ServiceA A { get; set; }
            public ServiceB(ServiceA a, TypeEn type)
            {
                this.A = a;
                this.Type = type;
            }

            public void ShowType()
            {
                System.Console.WriteLine(Type);
            }
        }
    }

免责声明:文章转载自《服务激活工具 ActivatorUtilities》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用logstash同步Mysql数据表到ES的一点感悟spring注解(Component、依赖注入、生命周期、作用域)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Centos下zip压缩分包和解压

1˃分包zip要分包,首先要把文件打成zip包后再分割。然后在将mypackage.zip以一个大小分割。...

泛微E8升级E9代码修改

E8升级E9需要修改后台二次开发的代码,总工作量相当大。CheckCustomize=function(){varnodeId=$.val();//应用程序节点如果{varpgrcontrol=$.val);varfinishpercent=$.vl();如果{如果{Dialog.alert(“进度控制为yes,需要完成百分比!”);return false...

NodeJs使用jwt生成token以及使用express-jwt校验和解密token

=0){//当数据库有当前用户时,它返回tokenlettoken=jwt.sign;res.send}else{res.send}}catch{//p抛出异常并将其发送到错误中间件以处理console.log;next;}})//注册接口路由器。post('/register',异步(req,res,next)=˃{let{用户名,密码,昵称}=req-b...

AcWing算法基础课

第二行包含n个整数,表示整数序列。输出格式对于每个输出指令PM,输出表示当前集合中最小值的结果。每个结果占据一行。数据范围1≤ N≤ 105109≤ x(x)≤ 109是合法的。输入示例:8I-10PMI-10D1C28I6PMDM输出示例:-106分析:对于向上和向下操作,请注意ph和hp的应用,这相当于指针ph[k]=t;插入堆中的Kth的位置为t;hp...

node.js

而同样,Node也提供了child_process.fork来创建Node的子进程。请参考文章后的multi-node的性能测试,可以看到在多Node进程的情景下,响应请求的速度被大幅度提高。在文章的写作中,Node最新发布的0.5.10版本新增了cluster启动参数。参数的使用方式如下:nodeclusterserver.js启动Node的时候,在附加了...

Linux(debian7)操作基础(四)之CPU频率调整 Linux系统CPU频率调整工具使用

在Linux中,内核的开发人员定义了一组框架模型,以实现动态调整CPU频率的目的,这就是CPUFreq系统。交互式:交互式模式,直接连接到最高频率,然后CPU负载缓慢降低,导致相对较高的功耗。Interactive根据计划的CPU数量来调整频率,以节省电力。InteractiveX根据CPU负载调整CPU频率,而不会过度降低频率。用户空间:用户定义的模式。该...