XML-версия единого конфига? - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь преобразовать образец, который я нашел, в конфигурацию 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 ]

2 голосов
/ 09 ноября 2011

Я знаю только синтаксис Unity 2.0, и это не так. Например, узлы type должны быть register, а узел containers никогда не поддерживался ни в одной версии Unity. Возможно ли, что вы просматриваете старую / плохую документацию?

Убедитесь, что вы используете Unity 2.0. Затем начните читать Использование конфигурации времени проектирования

Просто сканируйте ваш XML некоторые другие проблемы:

  1. Для ServiceProxy или TestService не определен псевдоним.
  2. Псевдоним IServiceProxy []:
    • Это не определяет тип
    • Рекурсивные псевдонимы не поддерживаются.

Указание типов в файле конфигурации поможет вам с синтаксисом псевдонима.

0 голосов
/ 12 ноября 2011

Ваши псевдонимы полностью скрыты в вашем примере.Вы не можете использовать синтаксис в квадратных скобках в псевдонимах для одного, вы должны использовать синтаксис типа 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>
...