ActivatorUtilities.CreateInstance()可以通过反射创建指定类型的实例,并自动解决依赖项,可以避免手动处理依赖项的麻烦。而使用new T()只能创建无参构造函数的实例,并且必须手动处理依赖项。
以下是使用ActivatorUtilities.CreateInstance()方法创建实例的示例代码:
//定义一个接口
public interface ISampleService
{
void DoSomething();
}
//定义一个实现ISampleService接口的类,该类有一个依赖项
public class SampleServiceImpl : ISampleService
{
private readonly ILogger _logger;
public SampleServiceImpl(ILogger logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.LogInformation("DoSomething is called.");
}
}
//获取ILogger实例
ILogger logger = serviceProvider.GetService>();
//使用ActivatorUtilities.CreateInstance创建SampleServiceImpl实例
ISampleService service = ActivatorUtilities.CreateInstance(serviceProvider, logger);
//调用实例的方法
service.DoSomething();