Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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
C# 配置MassTransit';初始化后的Ninject绑定_C#_Ninject_Masstransit - Fatal编程技术网

C# 配置MassTransit';初始化后的Ninject绑定

C# 配置MassTransit';初始化后的Ninject绑定,c#,ninject,masstransit,C#,Ninject,Masstransit,我想在代码中的某一点(使用WebActivator)配置MassTransit,并在另一点(Ninject模块)配置消息处理程序。有什么办法可以做到这一点吗?文档显示了如何在一个步骤中执行我需要的操作,但要执行其他任何操作,看起来我需要获得一个ServiceBusConfigurator的实例,该实例似乎无法从先前存在的IServiceBus配置中获得,IServiceBus的创建无法分离。 这意味着,您唯一的选择是在创建总线之前再收集一段时间的配置信息 如上所述,ninject提供的元数据信息

我想在代码中的某一点(使用WebActivator)配置MassTransit,并在另一点(Ninject模块)配置消息处理程序。有什么办法可以做到这一点吗?文档显示了如何在一个步骤中执行我需要的操作,但要执行其他任何操作,看起来我需要获得一个
ServiceBusConfigurator
的实例,该实例似乎无法从先前存在的
IServiceBus
配置中获得,
IServiceBus
的创建无法分离。 这意味着,您唯一的选择是在创建总线之前再收集一段时间的配置信息

如上所述,ninject提供的元数据信息不足以创建订阅。这基本上意味着您必须创建自己的元数据模型。让我们举一个例子,它既可以用于单个注册,也可以用于基于约定的注册:

提示:您应该将以下代码片段视为psuedo代码,正如我从内存中编写它们一样。它很可能无法编译

元数据模型 元数据的注册 现在可以像这样在Ninject模块中使用:

Bind<SubscriptionMetadata>()
   .ToConstant(new SubscriptionMetadata(typeof(FooConsumer));
基于公约的消费者约束 它还可以通过利用接口与一起使用。如果你愿意,我可以举个例子

Bind<SubscriptionMetadata>()
   .ToConstant(new SubscriptionMetadata(typeof(FooConsumer));
public static class SubscriptionBindingExtensions
{
    public static void BindConsumer<T>(this IBindingRoot bindingRoot)
        where T : IConsumer
    {
        Bind<SubscriptionMetadata>()
          .ToConstant(new SubscriptionMetadata(typeof(T));
    }
}
BindConsumer<FooConsumer>();
var kernel = new StandardKernel();
// 2nd Step left out: load all IModule`s ..

var bus = ServiceBusFactory.New(sbc =>
{
    //other configuration options

    foreach(var metadata in kernel.GetAll<SubscriptionMetadata>())
    {
        sbc.Subscribe(subs =>
        {
            subs.Consumer(metadata.ConsumerType, kernel)
        });
    }
});