Конфигурация Unity 2.0 XML с обобщениями - PullRequest
1 голос
/ 24 октября 2010

Это своего рода продолжение моего другого поста о Unity (http://stackoverflow.com/questions/3998559/irepository-iservice-unity-in-an-asp-net-mvc-application-reference-question). По сути, я пытаюсь зарегистрировать универсальный тип в web.config. Я прочитал несколько постов, и этот SEEMS вроде как настроен правильно.


<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
 <alias alias="IService" type="Porject.Service.IService`1, Porject.Service" />
 <alias alias="PropertyService" type="Porject.Service.PropertyService, Porject.Service"/>

 <container>
  <register type="IService[Property]" mapTo="PropertyService" />
 </container>
</unity>

Но я получаю эту ошибку:

Ошибка сервера в приложении '/'.

Не удалось разрешить имя типа или псевдоним IService [Property].Пожалуйста, проверьте файл конфигурации и проверьте имя этого типа. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: Имя типа или псевдоним IService [Свойство] не могут быть разрешены. Проверьте файл конфигурации и проверьте имя этого типа.

Ошибка источника:

Строка 33: Строка 34: раздел UnityConfigurationSection = (UnityConfigurationSection) ConfigurationManager.GetSection ("unity"); строка 35: разделion.Configure (_container);Строка 36: Строка 37:

Исходный файл: D: \ Projects \ Ex2 \ NCI \ TREB \ src \ WebUI \ UnityControllerFactory.cs Строка: 35

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010

Я думаю, вам нужно указать, какой тип используется для определения псевдонима.Я сделал пример для Как внедрить общий IList <> объектов с помощью XML-конфигурации Unity 2? , как показано ниже.

Список Предположим, вы хотите использовать разрешение из "IList"к списку".

1 Сначала вам необходимо подготовить файл конфигурации, в этом случае он использует подписанные ссылки на IList, а также List.


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="StringListContract" type="System.Collections.Generic.IList`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <alias alias="ConcreteStringList" type="System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <container>
      <register type="StringListContract" mapTo="ConcreteStringList">
        <lifetime type="ContainerControlledLifetimeManager" />
        <constructor />
      </register>
    </container>
  </unity>
</configuration>

2 Используйте контейнер для разрешения зависимости; -)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
namespace UnityTerminal
{


    class Program
    {
        static void Main(string[] args)
        {
            var container = new UnityContainer();
            container.LoadConfiguration();
            {
                var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
                concreteStringList.Add("Hello World");
            }
            {
                var concreteStringList = container.Resolve<System.Collections.Generic.IList<System.String>>();
                Console.WriteLine("{0}", concreteStringList[0]);
            }
            Console.ReadKey();
        }
    }
}

Этого должно быть достаточно, надеюсь, это сработает ;-) С уважением, Гербер

0 голосов
/ 31 октября 2010

Конфигурационный файл предназначен для чтения людьми, поэтому не усложняет вашу жизнь.Следующую строку действительно трудно поддерживать

<alias alias="IService" type="Porject.Service.IService`1, Porject.Service" />
0 голосов
/ 25 октября 2010

Для типа Свойство нет псевдонимов, ярлыков пространств / сборок Где этот тип определен? Исправьте это, и оно должно работать.

...