我正在尝试将我发现的示例转换为XML配置..
如果这是我在代码中要做的;
IUnityContainer unityContainer = new UnityContainer();
unityContainer.RegisterType<IServiceProxy<ITestService>, ServiceProxy<ITestService, TestServiceClient>>();
我在XML中做什么?我正在尝试这个,但是我错过了一些东西;
<unity>
<typeAliases>
<typeAlias alias="IServiceProxy" type="WCF.IServiceProxy, WCF" />
<typeAlias alias="ITestService"type="Interfaces.ITestService, Interfaces" />
<typeAlias alias="IServiceProxy[ITestService],ServiceProxy[ITestService,TestServiceClient]]" />
</typeAliases>
<containers>
<container name="servicesContainer">
<type type="IServiceProxy" mapTo="ServiceProxy" />
<type type="ITestService" mapTo="TestService" />
</container>
</containers>
</unity>
我只知道Unity 2.0的语法,这不是它。例如,type
节点应该是register
,而containers
节点在任何版本的Unity中都不支持。有没有可能你在看旧的/糟糕的文档?
确保你使用的是Unity 2.0。然后开始阅读Using Design-Time Configuration
只是扫描你的xml的一些其他问题:
- 没有为ServiceProxy或TestService定义别名
- IServiceProxy[]别名:
- 没有定义类型
- 递归别名不支持。
在配置文件中指定类型将帮助您使用别名语法。
您的别名在您的示例中是完全隐藏的。不能在别名中使用方括号语法,必须使用CLR类型语法。在最后一个别名中,你只需要给出一个别名它是一个很长的字符串,但你不需要指定类型。你也从来没有提供ServiceProxy别名,所以这个名字根本不存在,找不到。
假设您正在使用Unity 2.0,并且您已经在XML中添加了适当的
<unity>
<namespace name="WhateverYourNamespaceIs" />
<assembly name="AndWhateverAssembliesAre" />
<container name="servicesContainer">
<register type="IServiceProxy[ITestService]" mapTo="ServiceProxy[ITestService, TestServiceClient]" />
</container>
</unity>