2014-02-05 49 views
1

我想注入的依赖到NServiceBus消息赋值函数...因为存取器的寿命是由NServiceBus控制(NSB和想要一个paramaterless构造函数),构造器注入将无法正常工作......是否有可能向NServiceBus Message Mutator注入依赖关系?

有任何想法吗?

更新:这里是代码:

public class AddTransactionInformationToOutgoingHeaders : 
          IMutateOutgoingTransportMessages, 
          INeedInitialization 
{ 
    private readonly IProvideTransactionInformation transactionInformationProvider; 

    public void Init() 
    { 
     Configure.Instance.Configurer.ConfigureComponent<AddTransactionInformationToOutgoingHeaders>(DependencyLifecycle.InstancePerCall); 
    } 

    public AddTransactionInformationToOutgoingHeaders() 
    { 
    } 

    public AddTransactionInformationToOutgoingHeaders(IProvideTransactionInformation transactionInformationProvider) 
    { 
     this.transactionInformationProvider = transactionInformationProvider; 
    } 

    public void MutateOutgoing(object[] messages, TransportMessage transportMessage) 
    { 
     ... 
    } 
} 

}

如果我拿走了空构造函数,我从我ConfigureBus(抛出此错误消息)调用在Global.asax中: “没有为此对象定义的无参数构造函数。“

回答

1

很确定构造函数和属性注入都可以工作。什么是例外?

+0

Andreas,你知道使用StructureMap在构造函数中注入了什么东西的增变器的代码示例吗?我无法得到它的工作,试图在这篇文章和其他人的建议... – demoncodemonkey

+0

没关系,我得到它的工作。我错过了我的对象的子对象的Component.Configure。它支付阅读*完整*例外的细节... – demoncodemonkey

+1

很高兴你得到它! –

2

为了解决这个问题,我只保留了一个NServiceBus的空构造函数,然后创建了一个重载的构造函数,它取得了由Unity管理的依赖项。

它的工作原理。

不知道mutators可以这样工作。这是我第一次尝试将依赖注入到一个中。

UPDATE:

我身边这让通过使用属性注入的突变,而不是:

public class AddTransactionInformationToOutgoingHeaders : IMutateOutgoingTransportMessages, INeedInitialization 
{ 
    public IProvideTransactionInformation TransactionInformationProvider { get; set; } 

    public void Init() 
    { 
     Configure.Instance.Configurer.ConfigureComponent<AddTransactionInformationToOutgoingHeaders>(DependencyLifecycle.InstancePerCall); 
    } 

    public void MutateOutgoing(object[] messages, TransportMessage transportMessage) 
    { 
     ... 
    } 
} 

完美。

+0

听起来像一个错误。你可以提出一个问题在这里https://github.com/Particular/NServiceBus/issues – Simon

+1

INeedInitialization需要一个无参数的ctor。尝试将其移动到单独的课程? –

+0

Adreas,我刚结束了使用属性注入。 INeedInitializatino获得它所需的无参考价值,并且我的班级代码看起来更加整齐!谢谢您的帮助。仅供参考,观看了您的NServiceBus PluralSite视频,非常棒!让我开始使用消息增强器。任何计划在不久的将来对PluralSite进行中高级NSB教程? –