我的应用程序有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;
}
}
}
我在执行方法“Resolve”时遇到此异常:
系统.反射.目标调用异常:异常已由调用的目标抛出。---〉Microsoft.Practices.Unity.ResolutionFailedException:依赖关系解析失败,类型=“ApCon.IService”,名称=“Anagxxx”。异常消息为:当前生成操作(生成键Build Key[ApCon.StandardService,Anaxxxx])失败:当前生成操作(生成键Build Key[ApCon.StandardService,Anaxxxx])失败:索引超出数组的边界。(策略类型DynamicMethodConstructorStrategy,索引0)(策略类型BuildPlanStrategy,索引3)---〉Microsoft. Practices. ObjectBuilder 2.生成失败异常:当前生成操作(生成键Build Key[ApCon.StandardService,Anagrafe])失败:当前生成操作(生成键Build Key[ApCon.StandardService,Anagrafe])失败:索引在数组的边界之外。(策略类型DynamicMethodConstructorStrategy,索引0)(策略类型BuildPlanStrategy,索引3)---〉Microsoft. Practices.对象生成器2.生成失败异常:当前生成操作(生成键Build Key[ApCon.StandardService,Anagxxx])失败:索引超出数组的边界。(策略类型DynamicMethodConstructorStrategy,索引0)---〉系统。索引超出范围异常:索引超出数组的界限。在系统中的集合中的一般属性。列表1。在Microsoft中的Add(T项)。实践中的对象生成器2。依赖关系解析器跟踪器策略。AddResolverKey(对象键)在Microsoft中的实践中的对象生成器2。构造函数选择器策略库1。创建选定的构造函数(IBuilderContext context,构造器信息构造函数)。构造器选择器策略库1。选择构造器(IBuilderContext上下文)。内部异常堆栈跟踪的结尾---位于
可能是锁定指令吗?似乎类型未注册,isInitialized变为true
2条答案
按热度按时间icnyk63a1#
据我所知,您正在注册
IAnagrafeService
的命名示例,但试图解析IService
的命名示例。我猜第一个是从第二个派生出来的,所以应该是这样的:
(Or当然,您可以更改Unity注册。)
ni65a41a2#
我不认为这与未注册的服务有关。这通常会抛出此Exception:
当前类型IFoo是接口,无法构造.是否缺少类型Map?
这可能是锁定的结果。您可以尝试以下模式:
如果这不是一个选项,您可以尝试不锁定容器本身:
我发现这是单例模式的一个很好的源代码。
http://csharpindepth.com/Articles/General/Singleton.aspx