我有一个现有的通用接口如下:
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new()
{
... 问题是,我希望将这个通用接口作为另一个名为WorkflowService的类的属性,或者作为WorkflowService类构造函数中的属性。当我像在编译器下面的构造器示例中那样做时,我相信我在T位上遇到了问题(尽管我可能错了)。
例如WorkflowService构造器
public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator<T> workflowValidator) where T: IPersistent, IStateful
{发布于 2014-11-20 12:31:42
如果要在接受为构造函数参数的IWorkflowValidator<T>上设置泛型约束,则必须将类本身设置为泛型,并将约束添加到类的泛型类型参数中,如下所示:
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new()
{
}
public class WorkflowService<T> where T : IPersistent, IStateful, new()
{
private readonly IWorkflowValidator<T> _validator;
public WorkflowService(IWorkflowValidator<T> validator)
{
_validator = validator;
}
public IWorkflowValidator<T> Validator
{
get { return _validator; }
}
}发布于 2014-11-20 12:31:38
如果要将泛型接口传递给类,则必须向类中添加泛型参数。
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new() { }
public class WorkflowService<T> where T: IPersistent, IStateful, new()
{
public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator<T> workflowValidator)
{ }
}或者,您可以创建非泛型版本的接口(泛型版本的基础),并在创建实现接口泛型版本的类实例时指定类型。
public interface IWorkflowValidator { }
public interface IWorkflowValidator<T> : IWorkflowValidator
where T : IPersistent, IStateful, new() { }
public class WorkflowService
{
public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator workflowValidator) { }
}https://stackoverflow.com/questions/27039601
复制相似问题