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无法提供,将会从参数列表中依次获取。
代码语言:javascript复制 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);
}
}
}