[英]Registering a generic abstract class in Castle Windsor
我試圖按慣例注冊類型,在此示例中,我簡化了案例:
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());
調試時,我可以看到類型沒有添加到容器中。
我正在使用溫莎城堡2.6。
謝謝。
這有效:
container.Register(AllTypes.FromAssemblyContaining<ConcreteA>()
.BasedOn(typeof (GenericBaseClass<>))
.WithService.Base());
如果看到類型沒有添加到容器中,請確保您正在掃描正確的程序集(其中包含實現類型,而不是服務類型)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.