2

我正在尝试使用它自己的依赖注入容器和SimpleInjector 来熟悉NServiceBus 5,这是我们选择的容器。

有一种方法可以告诉 NServiceBus 注入

IBus 总线 {get;set;}

属性到所有 ASP.NET MVC ApiControllers(或其他地方)使用自定义NServiceBusControllerActivatorNServiceBusDependencyResolverAdapter.

但是,我们想使用 SimpleInjector,并且没有 MVC 应用程序,并且我们不想将 Bus 直接注入控制器。控制器应该是轻量级的,所以逻辑在“服务”内部,然后调用Bus.Send(message).

您将如何Bus使用 SimpleInjector 完成注入属性? 我知道人们曾尝试使用 NServiceBus 配置 SIMpleInjector,但他们就是不能一起工作。

4

1 回答 1

0

正如您在此处所读到的,我和 Kijana 试图提出一个完整的解决方案,用于将 Simple Injector 与 NServiceBus 集成。然而,Kijana 描述的问题(附加到集合)已经解决了很长时间。但是,将容器与 NServiceBus 集成还有许多其他问题,因为 NServiceBus 实现了符合容器 反模式。

我不确定这是否可以帮助您朝着正确的方向前进,但是您可以让 Simple Injector 构建在其他地方创建的实例,这允许将其IBus注入属性,如可以在此处此处阅读的那样。简而言之,您可以像这样配置 Simple Injector 进行属性注入:

class PropertySelectionBehavior<TAttribute> : IPropertySelectionBehavior
    where TAttribute : Attribute {
    public bool SelectProperty(Type type, PropertyInfo prop) {
        return prop.GetCustomAttributes(typeof(TAttribute)).Any();
    }
}

// Usage:
var container = new Container();
container.Options.PropertySelectionBehavior =
    new PropertySelectionBehavior<ImportAttribute>();

container.RegisterSingle<IBus>(bus);

您可以使用以下代码来构建内容:

public static BuildUp(object instance) {
    InstanceProducer producer =
        container.GetRegistration(instance.GetType(), throwOnFailure: true);
    Registration registration = producer.Registration;
    registration.InitializeInstance(instance);
}
于 2014-10-20T14:18:09.040 回答