我想在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()调用中抛出此错误消息: “没有为此对象定义无参数构造函数。”
答案 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)
非常确定构造函数和属性注入都应该有效。有什么例外?