CastleWindsor,注册来自公共接口的所有类

时间:2018-10-01 14:40:59

标签: c# asp.net castle-windsor

我有以下嵌套类和接口的场景:

internal class ComplaintDeletedAuditSubscriber : BaseDeletedEventAuditHandler<Complaint, DeletedEvent>
{
...
}

internal abstract class BaseDeletedEventAuditHandler<TEntity, TEvent> : BaseEventAuditHandler<TEntity, TEvent>{
...
}

internal abstract class BaseEventAuditHandler<TEntity, TEvent> : EventNatsSubscriberBase<TEvent>
{
...
}

internal abstract class EventNatsSubscriberBase<T> : INatsSubscriber where T : BaseEvent
{
...
}

我要实现的目标是在IoC容器中注册实现 INatsSubscriber 的所有类(用户)。如您所见, INatsSubscriber 是主要根目录,下面是某些级别,实际上是在最后一个级别,您可以找到 ComplaintDeletedAuditSubscriber ,这是我主要要注册的类。以及许多其他类似的订阅者。我想做的是:

Classes.FromThisAssembly()
     .BasedOn<INatsSubscriber>()
     .WithService.FromInterface()
     .LifestyleSingleton(),

和其他几次尝试当然..但是我的订阅者都没有被注入。从程序集中获取实现 INatsSubscriber 的类的正确方法是什么?预先感谢!

编辑:忘了提及我想将所有这些类作为IEnumerable注入。.举一个例子:

public QueueListener(IEnumerable<INatsSubscriber> subscribers)
    {
        _subscribers = subscribers;
    }

在这种情况下,订户应该是在IoC容器中注册的所有用于注入INatsSubscriber的类

1 个答案:

答案 0 :(得分:0)

您需要WithServiceBase()而不是FromInterface()

The documentation has a good overview每个选项的作用。