unity配置的XML版本



我正在尝试将我发现的示例转换为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的一些其他问题:

  1. 没有为ServiceProxy或TestService定义别名
  2. 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>

最新更新