Не удается разрешить типы из файла конфигурации Unity - PullRequest
0 голосов
/ 18 октября 2011

Пытаясь настроить Unity с помощью XML-конфигураций, я получаю это исключение

The type name or alias ServiceHost could not be resolved. Please check your configuration file and verify this type name.

Пытаясь прокомментировать это, я получаю одно и то же исключение для следующего и следующего за этим, поэтому проблема должна лежатьгде-то в моей настройке.

<unity>
    <typeAliases>

      <!-- Lifetime manager types -->
      <typeAlias alias="singleton"
           type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
             Microsoft.Practices.Unity" />
      <typeAlias alias="external"
           type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
             Microsoft.Practices.Unity" />
      <typeAlias alias="perThread"
           type="Microsoft.Practices.Unity.PerThreadLifetimeManager,
             Microsoft.Practices.Unity" />

      <!-- User-defined type aliases -->
      <typeAlias alias="ServiceHost"
                 type="System.ServiceModel.ServiceHost, System.ServiceModel" />
      <typeAlias alias="UnityServiceHost"
                 type="MyProjectServiceLibrary.Hosting.UnityServiceHost" />

      <typeAlias alias="IServiceBehavior"
                 type="System.ServiceModel.Descriptions.IServiceBehavior, System.ServiceModel" />
      <typeAlias alias="UnityServiceBehavior"
                 type="MyProjectServiceLibrary.Hosting.UnityServiceBehavior, MyProjectServiceLibrary" />

      <typeAlias alias="IInstanceProvider"
                 type="System.ServiceModel.Dispatcher.IInstanceProvider, System.ServiceModel" />
      <typeAlias alias="UnityInstanceProvider"
                 type="MyProjectServiceLibrary.Hosting.UnityInstanceProvider, MyProjectServiceLibrary" />

      <typeAlias alias="MyProjectService"
                 type="MyProjectServiceLibrary.Service.MyProjectService, MyProjectServiceLibrary" />

      <typeAlias alias="IRepositoryFactory"
                 type="MyProjectDataModelLibrary.Repository.IRepositoryFactory, MyProjectDataModelLibrary" />
      <typeAlias alias="RepositoryFactory"
                 type="MyProjectDataModelLibrary.Repository.RepositoryFactory, MyProjectDataModelLibrary" />

      <typeAlias alias="IDbContext"
                 type="MyProjectDataModelLibrary.DataContext.IDbContext, MyProjectDataModelLibrary" />
      <typeAlias alias="MyProjectDatabase"
                 type="MyProjectDataModelLibrary.DataContext.MyProjectDatabase, MyProjectDataModelLibrary" />

      <typeAlias alias="IRepositoryOfT"
                 type="MyProjectDataModelLibrary.Repository.IRepository`1, MyProjectDataModelLibrary" />
      <typeAlias alias="EntityRepositoryOfT"
                 type="MyProjectDataModelLibrary.Repository.EntityRepository`1, MyProjectDataModelLibrary" />

    </typeAliases>

    <containers>

      <container>
        <types>

          <type type="MyProjectService" />

          <type type="ServiceHost"
                mapTo="UnityServiceHost" />

          <type type="IServiceBehavior"
                mapTo="UnityServiceBehavior" />

          <type type="IInstanceProvider"
                mapTo="UnityInstanceProvider" />

          <type type="IRepositoryFactory"
                mapTo="RepositoryFactory" />

          <type type="IDbContext"
                mapTo="MyProjectDatabase" />

          <type type="IRepositoryOfT"
                mapTo="EntityRepositoryOfT" />

        </types>
      </container>

    </containers>
  </unity>

Я попытался прочитать вокруг, чтобы увидеть, что я делаю не так.Я сомневаюсь, что это полностью определенное имя, хотя я не могу быть уверен, поскольку я действительно не использовал это раньше.

IUnityContainer container = new UnityContainer();
container.RegisterInstance<IUnityContainer>(container);
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container);

Исключение выдается здесь в последней строке.

1 Ответ

2 голосов
/ 20 октября 2011

Поскольку вы ссылаетесь на системные типы, скорее всего, вы пытаетесь извлечь эти типы из GAC. В этом случае вам нужно будет использовать полные имена сборок, включая номер версии, культуру и токен открытого ключа. Примерно так:

<typeAlias alias="ServiceHost"
  type="System.ServiceModel.ServiceHost, System.ServiceModel,
  Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, 
  processorArchitecture=MSIL" />

Вам, конечно, нужно найти соответствующую версию # и токены открытого ключа для используемой версии .NET.

...