[英]How can I use Activator.CreateInstance to instantiate a generic type as part of a using block?
我想要实现的是将以下方法转换为更通用的方法:
private Task<TestResult> SpecificServiceWarmUp(string serviceEndPoint)
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (var service = new MySpecificClient(serviceEndPoint))
{
// do some stuff with specific client
}
});
}
更通用的版本如下所示:
private Task<TestResult> GenericServiceWarmUp<TService>(string serviceEndPoint)
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (/* instance of TService */)
{
// do some stuff with generic client
}
});
}
我不知道如何告诉using
块使用Activator
创建泛型类型的实例。 这可能吗? 如果是这样,我该怎么做?
private Task<TestResult> GenericServiceWarmUp<TService>()
where TService : IDisposable
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (var service =
(TService)Activator.CreateInstance(typeof(TService), serviceEndPoint))
{
// do some stuff with generic client
}
});
}
否则,如果您的服务没有构造函数参数 ,则无需使用Activator.CreateInstance
,则存在new()
约束 :
private Task<TestResult> GenericServiceWarmUp<TService>(string serviceEndPoint)
where TService : IDisposable, new()
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (var service = new TService())
{
// do some stuff with generic client
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.