Ошибка конфигурации Unity - PullRequest
       6

Ошибка конфигурации Unity

9 голосов
/ 05 октября 2011

У меня есть следующий метод конструкции Unity:

public static IUnityContainer CreateContainer()
{
    UnityContainer container = new UnityContainer();
    container.LoadConfiguration();

    .......
}

Затем интерфейс и класс реализации:

namespace MyCompany.Web.Areas.MyApp.Common
{
    public interface ISession
    {
    }
}

namespace MyCompany.Web.Areas.MyApp.Common
{
    public class SessionHandler : ISession
    {
    }
}

Вместо этого:

Container.RegisterType<ISession, SessionHandler>(new ContainerControlledLifetimeManager()) ;

Я хочу использовать container.LoadConfiguration () для загрузки вышеуказанной конфигурации RegisterType из web.config. НО, похоже, не работает

web.config:

  <unity>
    <containers>
      <container>
        <types>

          <type type="MyCompany.Web.Areas.MyApp.Common.ISession" mapTo="MyCompany.Web.Areas.MyApp.Common.SessionHandler">
            <lifetime type="singleton"/>
          </type>
        </types>
      </container>
    </containers>
  </unity>

Исключение:

Имя типаили псевдоним MyProject.Web.Areas.MyApp.Common.ISession не может быть разрешен.Пожалуйста, проверьте ваш конфигурационный файл и проверьте это имя типа.

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

Сведения об исключении: System.InvalidOperationException: имя типа или псевдоним MyProject.Web.Areas.MyApp.Common.ISession не может быть разрешен.Пожалуйста, проверьте ваш файл конфигурации и проверьте имя этого типа.

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

Строка 33: {Строка 34: контейнер UnityContainer = new UnityContainer ();Строка 35: container.LoadConfiguration ();Строка 36: Строка 37: //container.RegisterType(new ContainerControlledLifetimeManager ());

Трассировка стека:

[InvalidOperationException: имя типа или псевдонимMyProject.Web.Areas.MyApp.Common.ISession не может быть решена.Пожалуйста, проверьте ваш файл конфигурации и проверьте это имя типа.]Src \ ConfigurationHelpers \ TypeResolverImpl.cs: 110 Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolver.ResolveType (String typeNameOrAlias) в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unityr.cs: 47 Microsoft.Practices.Unity.Configuration.RegisterElement.GetRegisteringType () в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ RegisterElement.cs: 121 Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer (контейнер IUnityContainer) в каталоге e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ RegisterElement.cs: 88 Microsoft.Practices.Unity.Configuration.ContainerConfiguringElement.ConfigureContainerInternal (IUnityControlконтейнер ainer) в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ ContainerConfiguringElement.cs: 43 Microsoft.Practices.Unity.Configuration. <> c__DisplayClass1.b__0 (элемент ContainerConfiguringElement) в e: \ Builds\ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ ContainerElement.cs: 114 Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach (действие IEnumerable 1 sequence, Action 1) в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity\ Unity \ Src \ ObjectBuilder \ Utility \ EnumerableExtensions.cs: 36 Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer (контейнер IUnityContainer) в каталоге e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity. Unity.Configuration \ Slecment.cs: ​​110 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure (контейнер IUnityContainer, строка configContainerName строки) в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ UnityConfigurationSection.cs: 151.Unity.Configuration.UnityContainerExtensions.LoadConfiguration (контейнер IUnityContainer, раздел UnityConfigurationSection, String containerName) в каталоге e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ UnityContainerExtensions.cs: 37 Microsoft.Practices.Unity.Configuration.UnityContainoContainerContainer ()) в e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity.Configuration \ Src \ UnityContainerExtensions.cs: 64MyProject.Web.ApplicationContainer.CreateContainer () в C: \ Workspace \ MCDev \ MyApp \ MyApp \ MyProject.Web \ ApplicationContainer.cs: 35 MyProject.Web.ApplicationContainer.Initialize (контекст HttpContext) в C: \ Workspace \ MCDev\ MyApp \ MyProject.Web \ ApplicationContainer.cs: 53 MyProject.Web.MvcApplication.Application_Start () в C: \ Workspace \ MCDev \ MyApp \ MyApp \ MyProject.Web \ Global.asax.cs: 41

1 Ответ

10 голосов
/ 05 октября 2011

Я не думаю, что он знает, что DLL искать:

<unity>
    <containers>
      <container>
        <types>
          <type type="MyCompany.Web.Areas.MyApp.Common.ISession, MyCompany" mapTo="MyCompany.Web.Areas.MyApp.Common.SessionHandler, MyCompany">
            <lifetime type="singleton"/>
          </type>
        </types>
      </container>
    </containers>
  </unity>
...