私のアプリケーションには、同じソフトウェアとハードウェアを備えた 10 個の WCFService (プラットフォーム .NET Framework 3.5 の WCFService アプリケーション) がありますが、この例外を受け取るのは 1 つだけです。
ユーザーがログインすると、次のメソッドが呼び出されます。
public IService Select(SelectServiceRequest request)
{
IAxxxService anagServ = IoC.Container.Resolve<IAxxxService>(request.GetRegisteredService().ToString());
return xxxServ;
}
最初の実行で ClientIdentifier = 0 の GetRegisteredService() 実装を使用
public RegisteredServices GetRegisteredService() { RegisteredServices res = RegisteredServices.Estxxx; if (ClientIdentifier == 0) { res = RegisteredServices.Anaxxx; } else if (ClientIdentifier == 1) { res = RegisteredServices.Prixxx; } else if (ClientIdentifier == 2) { res = RegisteredServices.Estrxxx; } else if (ClientIdentifier == 3) { res = RegisteredServices.LixxAnagrxx; } return res; }
IOC コードの実装と初期化:
internal class IoC{ private static IUnityContainer container = new UnityContainer(); private static bool isInitialized = false; public static IUnityContainer Container { get { if (!isInitialized) { lock (container) { if (!isInitialized) container.RegisterType<IService, EstxxService>(RegisteredServices.Esxxxxx.ToString()); container.RegisterType<IService, StaxxxService>(RegisteredServices.Anaxxxx.ToString()); container.RegisterType<IService, PrixxxService>(RegisteredServices.Prixxxx.ToString()); container.RegisterType<IService, LixxxAxxxService>(RegisteredServices.LixxxAnagxx.ToString()); isInitialized = true; } } } return container; } }
}
実行方法「解決」でこの例外があります。
System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> Microsoft.Practices.Unity.ResolutionFailedException: 依存関係の解決に失敗しました。タイプ = "ApCon.IService"、名前 = "Anagxxx"。例外メッセージ: 現在のビルド操作 (ビルド キー Build Key[ApCon.StandardService, Anaxxxx]) が失敗しました: 現在のビルド操作 (ビルド キー Build Key[ApCon.StandardService, Anaxxxx]) が失敗しました: インデックスが配列の範囲外でした. (戦略タイプ DynamicMethodConstructorStrategy、インデックス 0) (戦略タイプ BuildPlanStrategy、インデックス 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: 現在のビルド操作 (ビルド キー Build Key[ApCon.StandardService, Anagrafe]) が失敗しました: 現在のビルド操作 (ビルド キー Build Key[ApCon.StandardService, Anagrafe]) が失敗しました: インデックスが配列の範囲外でした。(戦略タイプ DynamicMethodConstructorStrategy、インデックス 0) (戦略タイプ BuildPlanStrategy、インデックス 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: 現在のビルド操作 (ビルド キー Build Key[ApCon.StandardService, Anagxxx]) が失敗しました: インデックスが外部にありました配列の境界。(戦略タイプ DynamicMethodConstructorStrategy、インデックス 0) ---> System.IndexOutOfRangeException: インデックスが配列の範囲外でした。System.Collections.Generic.List1.Add(T item) で Microsoft.Practices.ObjectBuilder2.DependencyResolverTrackerPolicy.AddResolverKey(Object key) で Microsoft.Practices.ObjectBuilder2 で。
それはロック命令でしょうか?型が登録されておらず、isInitialized が true になったようです