2
依存性注入のために城ウィンザーを使用し、いくつかの一般的なタイプを注入しようとしています。しかし、コンテナで解決を呼び出すと、次のエラーが発生します。城ウィンザー - 車は実装タイプの一般的な制約を満たさない
クラスは実装タイプの一般的な制約を満たしていません。
この例では、現時点で単純な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 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");
である私のインストーラ
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());
}
です高く評価された
ありがとうございます。私はあなたが提案し、ジェネリック制約を削除したスイッチを作ったと働いた – chrisblue13