统一配置的XML版本?

时间:2011-11-09 13:59:40

标签: wcf unity-container

我正在尝试将我找到的示例转换为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>

2 个答案:

答案 0 :(得分:2)

我只知道Unity 2.0语法,这不是它。例如,type节点应为register,并且任何版本的Unity都不支持containers节点。您是否有可能查看旧/差文档?

确保您使用的是Unity 2.0。然后开始阅读Using Design-Time Configuration

只是扫描你的xml一些其他问题:

  1. 没有为ServiceProxy或TestService定义别名。
  2. IServiceProxy []别名:
    • 它没有定义类型
    • 递归别名不支持
  3. Specifying Types in the Configuration File将帮助您使用别名语法。

答案 1 :(得分:0)

你的别名在你的例子中完全没有了。您不能在别名中使用方括号语法,必须使用CLR类型语法。在最后一个别名中,您只需提供一个别名,这是一个很长的字符串,但您从不指定类型。您也永远不会提供ServiceProxy别名,因此该名称不存在且无法找到。

假设您使用的是Unity 2.0,并且已添加了相应的&lt; namespace&gt;和&lt; assembly&gt; XML中的节点指向程序集,这应该可以工作:

<unity>
  <namespace name="WhateverYourNamespaceIs" />
  <assembly name="AndWhateverAssembliesAre" />
  <container name="servicesContainer">
    <register type="IServiceProxy[ITestService]" mapTo="ServiceProxy[ITestService, TestServiceClient]" />
  </container>
</unity>