繁体   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