我有一个具有 Web 和辅助角色的 Windows Azure 云服务。这两个角色都使用组合根中的 Unity 容器来注册类型(截至本文的最新 nuget pkgs)。
所有这些代码在调试时在 Azure 模拟器中运行时运行良好,但是,当我创建包并部署云服务时,我在角色运行时立即遇到此错误(当我点击页面取决于所讨论的类型,而工作人员角色将在运行时立即点击它)。
我得到一个 NullReferenceException 如下:
[ResolutionFailedException: Resolution of the dependency failed, type = "MyApp.Mvc.Controllers.HomeController", name = "(none)".
Exception occurred while: Calling constructor MyApp.Azure.Messaging.ServiceBusMessagingClient(System.String serviceBusConnectionString).
Exception is: NullReferenceException - Object reference not set to an instance of an object.
这是我的类型的 ctor 中的代码,它是 Azure 服务总线的包装器客户端:
public ServiceBusMessagingClient(string serviceBusConnectionString)
{
Guard.NotNullOrEmpty(() => serviceBusConnectionString, serviceBusConnectionString);
_log = LogFactory.GetCurrentClassLogger();
ConnectionString = serviceBusConnectionString;
_msgFactory = MessagingFactory.CreateFromConnectionString(ConnectionString);
_retryPolicy = new RetryPolicy<ServiceBusTransientErrorDetectionStrategy>(RetryStrategy.DefaultClientRetryCount);
_clients = new Dictionary<string, QueueClient>();
}
这是我的引导程序的代码,在 web app_start 或工作角色的 OnStart 中调用:
var sbConn = CloudConfigurationManager.GetSetting(Constants.KeyServiceBusConnectionString);
container.RegisterType<IMessagingClient, ServiceBusMessagingClient>(new InjectionConstructor(sbConn));
谁能告诉我为什么我会遇到这样的异常?我在 ctor 代码中看不到任何可能产生空引用的内容。而且我不明白为什么它在模拟器中有效,但在云部署中无效。我已经验证了云设置以确保我的连接字符串在那里。谢谢!