如何使用Castle Windsor自动注册开放式泛型接口?

4
我需要自动将我的开放泛型接口注册到其实现类中。 我的接口类似于IIntegrationEventHandler。
public interface IIntegrationEventHandler<in TIntegrationEvent> 
    where TIntegrationEvent : BaseIntegrationEvent
{
    Task HandleAsync(TIntegrationEvent @event);
}

我的处理程序将类似于这样

    public class EmployeeEventsHandler : IIntegrationEventHandler<EmployeeUserCreated>
{
    public async Task HandleAsync(EmployeeUserCreated @event)
    {
        throw new NotImplementedException();
    }        
}

有没有一种通用的方法在Castle Windsor中进行这样的注册,而不需要为每个处理程序手动注册,我搜索了很多但是没有找到。请注意,我没有基础处理程序类,只有通用的接口和实现类。
1个回答

4

在这里,按照惯例进行注册应该是有效的:

var container = new WindsorContainer();

container.Register(
    Classes.FromAssemblyNamed("YourHandlersAssemblyName")
    .BasedOn(typeof(IIntegrationEventHandler<>))
    .WithServiceFirstInterface());

var handler = container.Resolve<IIntegrationEventHandler<EmployeeUserCreated>>();

嗨@jan,感谢您的回复,是的,它有效,但代理解析的对象没有正常工作。 - yo2011
@yo2011,那么您应该编辑您的问题以显示您的意思。 - Jan Muncinsky
嗨@jan,你的答案正是我所需要的,但当我尝试执行我的处理程序时,出现了一个错误“对象已释放”。 - yo2011
谢谢,我解决了这个问题,你的解决方案有效。 - yo2011
1
为了更加明确(并避免在您的类实现多个接口的情况下产生歧义),我建议对其进行微小调整,使用.WithServiceBase() - Krzysztof Kozmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接