Webとワーカーの役割を持つWindowsAzureクラウドサービスがあります。どちらのロールも、コンポジションルートのUnityコンテナーを使用してタイプを登録します(この投稿の時点で最新のnuget pkgs)。
このコードはすべて、デバッグ時にAzureエミュレーターで実行すると正常に機能しますが、パッケージを作成してクラウドサービスをデプロイすると、ロールを実行するとすぐにこのエラーが発生します(Webロールは、問題のタイプに依存するページですが、ワーカーロールは実行時にすぐにヒットします)。
次のように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.
AzureServiceBusのラッパークライアントである私のタイプのctorのコードは次のとおりです。
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>();
}
そして、Webapp_startまたはワーカーロールのOnStartのいずれかで呼び出されるブートストラッパーのコードは次のとおりです。
var sbConn = CloudConfigurationManager.GetSetting(Constants.KeyServiceBusConnectionString);
container.RegisterType<IMessagingClient, ServiceBusMessagingClient>(new InjectionConstructor(sbConn));
なぜ私がそのような例外を受け取っているのか誰かに教えてもらえますか?ctorコードには、null参照を生成する可能性のあるものは何も表示されません。また、エミュレータでは機能するがクラウド展開では機能しない理由がわかりません。接続文字列がそこにあることを確認するために、クラウド設定をすでに確認しました。ありがとう!