2011-10-18 26 views
0

嘗試通過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); 

這裏的最後一行引發了異常。

+0

您使用的是哪個版本的Unity?看起來像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版本查找適當的版本號和公鑰標記。