ActivatorUtilities.CreateInstance用于各种激活器服务的帮助程序代码。
ActivatorUtilities
官方链接
作用
当某些服务不方便依赖注入时使用
比如: 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);
}
}
}
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET