城堡温莎-汽车唐';t满足实现类型的通用约束

本文关键字:类型 实现 满足 约束 汽车 城堡 | 更新日期: 2023-09-27 17:58:14

我正在使用castle windsor进行依赖项注入,并尝试注入一些泛型类型。然而,当我在我的容器上调用resolve时,我会得到以下错误:

类不满足实现类型的泛型约束。

在本例中,我现在传递一个简单的Car类型。

public class CreateRequestInstance<T> where T : class, ICreateRequestInstance<T>
{
    private IRequestObject<T> _IRequestObject;
    public CreateRequestInstance(IRequestObject<T> requestObject)
    {
        this._IRequestObject = requestObject;
    }
    public TReturn CreateRequest<TReturn>(string provider, string type, string token, T request,
        string revision, string errorCode, string errorMessage)
    {
        _IRequestObject.Provider = provider;
        _IRequestObject.Type = type;
        _IRequestObject.Token = token;
        _IRequestObject.Request = request;
        _IRequestObject.ErrorCode = errorCode;
        _IRequestObject.ErrorMessage = errorMessage;
        return (TReturn)Convert.ChangeType(_IRequestObject, typeof(IRequestObject<T>));
    }  
}

这是我的安装程序:

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container
        .Register(Component
            .For(typeof(ICreateRequestInstance<>))
            .ImplementedBy(typeof(CreateRequestInstance<>))
            .LifestyleTransient())
         .Register(Component
            .For(typeof(ICreateResponseInstance<>))
            .ImplementedBy(typeof(CreateResponseInstance<>))
            .LifestyleTransient())
        .Register(Component
            .For(typeof(IRequestObject<>))
            .ImplementedBy(typeof(RequestObject<>))
            .LifestyleTransient())
        .Register(Component
            .For(typeof(IResponseObject<>))
            .ImplementedBy(typeof(ResponseObject<>))
            .LifestyleTransient());
}

这是我班的工厂电话:

public T GetConcreteClass<T>()
{
    var someClass = container.Resolve<T>();
    return someClass;
}

这是呼叫代码:

var t = factory.GetConcreteClass<ICreateRequestInstance<ICar>>();
var test = t.CreateRequest<ICar>("provide", "test", "test", car, "1", "this is a test", "fred");

如有任何帮助,我们将不胜感激。

城堡温莎-汽车唐';t满足实现类型的通用约束

public class CreateRequestInstance<T> where T : class, ICreateRequestInstance<T>

这看起来不对。您声明的类需要一个模板参数,该参数是实现ICreateRequestInstance<T>的类。这样,除非您的Car类型实现ICreateRequestInstance<T>(我怀疑它是否实现),否则您将看到错误。

我想你真的打算:

public class CreateRequestInstance<T> : ICreateRequestInstance<T> where T : class

这是一个实现ICreateRequestInstance<T>的类,它需要一个任意类的模板参数。