Мое приложение имеет 10 WCFService (WCFService приложения на платформе .NET Framework 3.5) с тем же программным обеспечением и аппаратными средствами, но только 1 принимает это исключение:Unity + C# - "Постановление зависимости не удалось"
Когда пользователь регистрируется вызвать этот метод:
public IService Select(SelectServiceRequest request)
{
IAnagrafeService anagServ = IoC.Container.Resolve<IAnagrafeService>(request.GetRegisteredService().ToString());
return anagServ;
}
с GetRegisteredService() реализацию с ClientIdentifier = 0 для первого исполнения
public RegisteredServices GetRegisteredService() { RegisteredServices res = RegisteredServices.Estrattori; if (ClientIdentifier == 0) { res = RegisteredServices.Anagrafica; } else if (ClientIdentifier == 1) { res = RegisteredServices.Privacy; } else if (ClientIdentifier == 2) { res = RegisteredServices.Estrattori; } else if (ClientIdentifier == 3) { res = RegisteredServices.ListaAnagrafica; } return res; }
с реализации кода МОК и Initilization:
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, EstattoriService>(RegisteredServices.Estrattori.ToString()); container.RegisterType<IService, StandardService>(RegisteredServices.Anagrafica.ToString()); container.RegisterType<IService, PrivacyService>(RegisteredServices.Privacy.ToString()); container.RegisterType<IService, ListAnagService>(RegisteredServices.ListaAnagrafica.ToString()); isInitialized = true; } } } return container; } }
}
я есть это исключение на метод выполнения "Resolve":
System.Reflection.TargetInvocationException: Исключение было , брошенное объектом вызова. ---> Microsoft.Practices.Unity.ResolutionFailedException: сбой разрешения зависимости, тип = «ApCon.IService», name = «Anagrafe». Сообщение об исключении: Не удалось выполнить текущую операцию сборки (build key Build Key [ApCon.StandardService, Anagrafe]): Не удалось выполнить текущую операцию сборки (построить ключ Build Key [ApCon.StandardService, Anagrafe]): индекс находился за пределами границ массива. (Тип стратегии DynamicMethodConstructorStrategy, index 0) (Тип стратегии BuildPlanStrategy, index 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: Не удалось выполнить текущую операцию сборки (ключ сборки Build [ApCon.StandardService, Anagrafe]): Не удалось выполнить текущую операцию сборки (ключ сборки Build Key [ApCon.StandardService, Anagrafe]): индекс находился за пределами границ . (Тип стратегии DynamicMethodConstructorStrategy, index 0) (Тип стратегии BuildPlanStrategy, index 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: текущая операция сборки (ключ сборки Build Key [ApCon.StandardService, Anagrafe]) не удалось: Индекс находился за пределами массива. (Тип стратегии DynamicMethodConstructorStrategy, index 0) ---> System.IndexOutOfRangeException: индекс находился за пределами массива. на System.Collections.Generic.List1.Add (Т ст) при Microsoft.Practices.ObjectBuilder2.DependencyResolverTrackerPolicy.AddResolverKey (Object ключ) на Microsoft.Practices.ObjectBuilder2.ConstructorSelectorPolicyBase`1.CreateSelectedConstructor (IBuilderContext контексте, ConstructorInfo т е р) при Microsoft.Practices.ObjectBuilder2.ConstructorSelectorPolicyBase1.SelectConstructor (IBuilderContext контекста) при Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp (IBuilderContext контекста) при Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext контекст) --- Конец внутренней трассировки стека исключений --- в
Может быть инструкция замок? Кажется, что типы не были зарегистрированы и isInitialized стало true
ли вы добавить какие-либо buildoperations в вашем WCF-сервис? Как вы инициализируете Unity в своем сервисе? – smoksnes
Я обновил вопрос, поэтому инициализация Unity входит в класс IoC. – Dilo
Вы блокируете, потому что вы получаете доступ к нему с большим количеством потоков? – smoksnes