我想註冊類型按照慣例註冊一個通用的抽象類,我已經簡化我的情況下,在這個例子中:在溫莎城堡
public abstract class BaseEntity{}
public class EntityA : BaseEntity{}
public class EntityB : BaseEntity{}
public abstract class BaseClass
{
//...
}
public abstract class GenericBaseClass<T> : BaseClass where T : BaseEntity
{
//..
}
public class ConcreteA : GenericBaseClass<EntityA>
{
//...
}
public class ConcreteB : GenericBaseClass<EntityB>
{
//...
}
我試圖找到註冊GenericBaseClass
的方式當請求GenericBaseClass<EntityA>
時返回ConcreteA
。當試圖解決這個問題,我得到一個異常說是這樣的:在試圖讓 類型GenericBaseClass`1的情況下,關鍵的「」
激活出錯如果我改變的定義
GenericBaseClass<T>
從抽象類的接口,這個註冊代碼的工作:container.Register(AllTypes.FromAssemblyContaining<BaseClass>() .BasedOn(typeof(GenericBaseClass<>)) .WithService.FirstInterface());
不過,我需要因爲我需要寫的這裏面的代碼中使用抽象類。 我可以手動註冊每個
ConcreteX
類,但它不會很有幫助。我試過這個:
container.Register(AllTypes.FromAssemblyContaining<BaseClass>() .BasedOn(typeof(GenericBaseClass<>)) .WithService.Base());
調試,我可以看到的類型不添加到容器。
我正在使用Castle Windsor 2.6。
謝謝。
沒有溫莎2.6。你的意思是2.5.4嗎? –