簡體   English   中英

在溫莎城堡注冊通用抽象類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM