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;
}
내 설치
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());
}
이며,이 호출 코드
var t = factory.GetConcreteClass<ICreateRequestInstance<ICar>>();
var test = t.CreateRequest<ICar>("provide", "test", "test", car, "1", "this is a test", "fred");
입니다
이것에 어떤 도움이 될 것입니다 감사 :
감사합니다. 나는 당신이 제네릭 제약을 제안하고 제거한 스위치를 만들었고 그것이 효과가 있었다. – chrisblue13