2011-08-10 86 views
3

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

端点:

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 
    } 

在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> 

和我佐贺接受邮件如下

​​

空引用厚望会尝试调用时抛出SaveOrder()。我是否正确配置了依赖注入?

回答

7

NServiceBus会自动完成属性注射给你,让你只需要与容器注册你的资料库:

在你Init()方法:(上一个单独的类实现IWantCustomInitialization

Configure.Instance.ConfigureComponent<OrderRepository>([The lifecycle you want]); 

IWantToRunAtStartup是不是用于配置任务(使用IWantCustomInitialization代替)

+1

辉煌。谢谢安德烈亚斯。那就是诀窍。 – Adam

+3

现在有一个简短的形式,只是:Configure.Component (生命周期); –