2011-10-18 3 views
0

XML 구성을 통해 Unity를 설정하려고 시도합니다.이 예외가 발생합니다.단일 구성 파일에서 유형을 확인할 수 없음

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); 

예외는 여기 마지막 행에 표시됩니다.

+0

어떤 유니티 버전을 사용하고 있습니까? 1.2처럼 보이지만 확인하고 싶었습니다. –

+0

.dll에 2.0.414.0이 표시됩니다. –

+0

유형에 어셈블리 이름이 없습니다. – ErnieL

답변

2

시스템 유형을 참조하고 있으므로 해당 유형을 GAC에서 가져 오는 것이 가장 가능성이 큽니다. 이 경우 버전 번호, 문화권 및 공개 키 토큰을 포함하여 완전한 어셈블리 이름을 사용해야합니다. 다음과 같은 내용 :

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

사용중인 .NET 버전에 적합한 버전 번호와 공개 키 토큰을 찾아야합니다.

관련 문제