NserviceBus属性注入

Ada*_*dam 3 nservicebus inversion-of-control

我试图将一个对象注入我的传奇.使用以下端点,当消息到达saga的handle方法时,属性为null.

终点:

 public class EndpointConfig : IConfigureThisEndpoint, AsA_Server,  IWantToRunAtStartup
        {
            public void Run()
            {
                IOrderRepository orderRepository = new OrderRepository();
                Configure.Instance.Configurer.ConfigureProperty<CreateOrderSaga>(x => x.OrderRepository, orderRepository);
            }

// stop method removed
    }
Run Code Online (Sandbox Code Playgroud)

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>

  <MsmqTransportConfig
    InputQueue="Fulfilment.CreateOrder.OrderRecievedMessage"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="3"
  />

  <UnicastBusConfig
   DistributorControlAddress=""
   DistributorDataAddress="">
    <MessageEndpointMappings>
      <add Messages="NServiceBus.Saga.TimeoutMessage, NServiceBus" Endpoint="timeoutmanager" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的佐贺接受如下消息

    public class CreateOrderSaga : Saga<CreateOrderSagaData>,
            IAmStartedByMessages<OrderRecievedMessage>,
            IHandleMessages<OrderCompletedMessage>,
            IHandleMessages<OrderCancelledMessage>
        {
            public IOrderRepository OrderRepository { get; set; }
            public void Handle(OrderRecievedMessage message)
            {
var order = new Order();
 OrderRepository.SaveOrder(order);
            }
Run Code Online (Sandbox Code Playgroud)

尝试调用SaveOrder()时将抛出null引用预期.我是否正确配置了依赖注入?

And*_*und 7

NServiceBus会自动为您执行属性注入,因此您只需要在容器中注册您的存储库:

在您的Init()方法中:( IWantCustomInitialization在单独的类上实现)

Configure.Instance.ConfigureComponent< OrderRepository >([The lifecycle you want]);
Run Code Online (Sandbox Code Playgroud)

IWantToRunAtStartup不适用于配置任务(IWantCustomInitialization改为使用)

  • 现在有一个缩短形式的只有:Configure.Component <T>(生命周期); (3认同)