我需要使用CustomConfigurationSource创建一个NServiceBus来替换我的app.config。
我在我的代码中实现了CustomConfiguration源,但是在创建总线时出现以下异常:
System.NullReferenceException未处理 的HResult = -2147467261 Message =对象引用未设置为对象的实例。 来源= NServiceBus.Core 堆栈跟踪: 位于c:\ TeamCity \ buildAgent \ work \ nsb.master_10 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction):第852行
我在A班创建我的公共汽车如下:
public class A: IA
{
public static IBus Bus { get; private set; }
public A()
{
CreateBus();
}
private void CreateBus()
{
Bus = NServiceBus.Configure.With()
.CustomConfigurationSource(new AConfigSource())
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
// Exception thrown here ******
}
}
我的配置类:
public class AConfigSource: IConfigurationSource
{
#region Implementation of IConfigurationSource
public T GetConfiguration<T>() where T : class, new()
{
if (typeof(T) == typeof(MessageForwardingInCaseOfFaultConfig))
return MessageForwardingInCaseOfFaultConfiguration() as T;
if (typeof(T) == typeof(MsmqTransportConfig))
return MsmqTransportConfiguration() as T;
if (typeof(T) == typeof(UnicastBusConfig))
return UnicastBusConfiguration() as T;
// leaving the rest of the configuration as is:
return ConfigurationManager.GetSection(typeof(T).Name) as T;
}
#endregion Implementation of IConfigurationSource
#region Private
private MessageForwardingInCaseOfFaultConfig MessageForwardingInCaseOfFaultConfiguration()
{
return new MessageForwardingInCaseOfFaultConfig
{
ErrorQueue = "error"
};
}
private UnicastBusConfig UnicastBusConfiguration()
{
return new UnicastBusConfig();
}
private MsmqTransportConfig MsmqTransportConfiguration()
{
return new MsmqTransportConfig
{
ErrorQueue = "error",
InputQueue = "myInputQueue",
MaxRetries = 5,
NumberOfWorkerThreads = 1
};
}
#endregion Private
}
导致NullReferenceException的原因是什么?我错过了哪些步骤来覆盖我的所有nservicebus配置?
更新: 我使用的是NServiceBus版本3.3.8。
更新: 根据John的回答,我更改了我的私有UnicastBusConfiguration方法,如下所示:
private UnicastBusConfig UnicastBusConfiguration()
{
return new UnicastBusConfig
{
ForwardReceivedMessagesTo = "",
MessageEndpointMappings = new MessageEndpointMappingCollection()
};
}
我仍然得到上面提到的相同例外。
以下是我需要在A类中运行的配置:
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig ForwardReceivedMessagesTo="">
<MessageEndpointMappings></MessageEndpointMappings>
</UnicastBusConfig>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NServiceBus" publicKeyToken="9fc386479f8a226c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NServiceBus.Core" publicKeyToken="9fc386479f8a226c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
更多信息:我正在运行WPF应用程序。我在我的解决方案中添加了一个类库来托管nservicebus。我创建了一个上面提到的对象“A类”的实例。我需要nservicebus来配置基于app.config的A类,而不是我的WPF启动项目的app.config。
也许CustomConfigurationSource有点矫枉过正?有没有更好的方法来命令NServiceBus在A类项目中使用app.config进行配置?
更新:我收到以下错误,表示缺少UnicastBus.cs类。我在我的项目中引用了NserviceBus.Host ......
找到'c:\ TeamCity \ buildAgent \ work \ nsb.master_10 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs'的源代码。 (没有校验和。) 文件'c:\ TeamCity \ buildAgent \ work \ nsb.master_10 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs'不存在。 在'c:\ TeamCity \ buildAgent \ work \ nsb.master_10 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs'的脚本文档中查找... 查看'c:\ TeamCity \ buildAgent \ work \ nsb.master_10 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs'的项目。 在项目中找不到该文件。
答案 0 :(得分:0)
猜猜但我会说你可能需要初始化一些UnicastBusConfig
属性。