是否可以将依赖注入NServiceBus消息Mutator?

时间:2014-02-05 20:03:02

标签: nservicebus

我想在NServiceBus Message Mutator中注入一个依赖...因为Mutator的生命周期是由NServiceBus控制的(而NSB想要一个无参数的构造函数),构造函数注入将不起作用......

任何想法?

更新:这是代码:

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)
    {
        ...
    }
}

}

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

2 个答案:

答案 0 :(得分:2)

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

有效。

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

更新:

我通过在mutator上使用属性注入来解决这个问题:

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)
    {
        ...
    }
}

工作得很好。

答案 1 :(得分:1)

非常确定构造函数和属性注入都应该有效。有什么例外?