Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将SimpleInjector与NServiceBus一起使用以注入IBus总线属性_.net_C# 4.0_Dependency Injection_Simple Injector_Nservicebus4 - Fatal编程技术网

.net 将SimpleInjector与NServiceBus一起使用以注入IBus总线属性

.net 将SimpleInjector与NServiceBus一起使用以注入IBus总线属性,.net,c#-4.0,dependency-injection,simple-injector,nservicebus4,.net,C# 4.0,Dependency Injection,Simple Injector,Nservicebus4,我正试图通过使用自己的依赖注入容器和我们选择的容器来获得对NServiceBus 5的认可 有一种方法可以告诉NServiceBus注入 IBus总线{get;set;} 使用自定义的NServiceBusControllerActivator和nServiceBusDependencyResolveDatapter将属性导入所有ASP.NET MVC APIController(或其他地方) 但是,我们希望使用SimpleInjector,没有MVC应用程序,也不希望将总线直接注入控制器。 控

我正试图通过使用自己的依赖注入容器和我们选择的容器来获得对NServiceBus 5的认可

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

IBus总线{get;set;}

使用自定义的
NServiceBusControllerActivator
nServiceBusDependencyResolveDatapter
将属性导入所有ASP.NET MVC APIController(或其他地方)

但是,我们希望使用SimpleInjector,没有MVC应用程序,也不希望将总线直接注入控制器。 控制器应该是轻量级的,因此逻辑在“服务”内部,服务依次调用
Bus.Send(message)

如何使用SimpleInjector注入
总线
属性?
我知道用NServiceBus配置SImpleInjector,但它们不能协同工作。

正如您所看到的,我和Kijana试图提出一个完整的解决方案,将SImpleInjector与NServiceBus集成。然而,Kijana描述的问题(在集合中添加)已经解决了很长一段时间。然而,将容器与NServiceBus集成还存在许多其他问题,因为NServiceBus实现了反模式

我不确定这是否有助于您进入正确的方向,但您可以让在其他地方创建的简单注入器构建实例,这样就可以将
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);

所以你有一些IBU,你想把它注入到你的一些类中。为什么这与您已经在做的事情不同?为什么无法注册该IBU?如果我没记错的话,总线是单例的。@John,我不确定我是否遵循了这个问题,但是您可以让NServiceBus知道您使用的是什么容器,并设置一个自定义容器。这里有文档@Sean yes支持其他容器,但SimpleInjector不是其中之一(请参阅问题中的链接)。为什么要将其作为属性而不是使用标准构造函数注入?@Steven问得好。NServiceBus通过一个IneInInitialization接口来实现。实现该接口的类将使用支持的容器之一注入其总线属性。我以前从未使用过IoC,请原谅我的无知。我们的容器是不受支持的SimpleInjector(快速、简单)。我看到这里也做了一些工作。有人知道使用NServiceBus Simple Injector的DI现在可以工作吗?@johnkatenhorn,在构建代码时,我对NSB ansolutely需要什么有很多疑问,但这些答案仍然没有答案。因此,该代码在某些情况下可能有效,而在其他情况下可能失败。问题是,NSB是在考虑特定容器的情况下构建的。因此,如果可以的话,让NSB使用它的默认容器,并在解析自己的类型时插入您最喜欢的容器。然而,我不知道最好的方法是什么。
public static BuildUp(object instance) {
    InstanceProducer producer =
        container.GetRegistration(instance.GetType(), throwOnFailure: true);
    Registration registration = producer.Registration;
    registration.InitializeInstance(instance);
}