ActivatorUtilities.CreateInstance用于各种激活器服务的帮助程序代码。

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);
            }
        }
    }
posted @ 2022-03-20 18:21  跟着阿笨一起玩.NET  阅读(362)  评论(0编辑  收藏  举报