2011-04-27 129 views
0

有人可以幫助我嗎?我正在嘗試使用Unity IoC進行注射。這裏的代碼:使用Unity IoC容器

IUnityContainer container = new UnityContainer() 
           .RegisterType<IBaseModel, EmployeeModel>() 
           .RegisterType<IProxyObjectAdapter, EmployeeProxyObjectAdapter>() 
          .RegisterType<IAdventureWorksRepository<IProxyObjectAdapter>,AdventureWorksWCFRepository<IProxyObjectAdapter>>(); 

團結抱怨在最後一行。這裏的錯誤消息:

「AdventureWorksManagement.ServiceAgents.AdventureWorksWCFRepository」 在通用類型或方法不能被用作類型參數「TTO」 「Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType(Microsoft.Practices .Unity.IUnityContainer, params Microsoft.Practices.Unity.InjectionMember [])'。 沒有隱含的引用 轉換 'AdventureWorksManagement.ServiceAgents.AdventureWorksWCFRepository' 到 'AdventureWorksManagement.ServiceAgents.IAdventureWorksRepository'。 C:\我的開發\我的測試 地面\ MyTesting 地面\ AdventureWorksManagement \模型視圖\ EmployeeViewModel.cs 94 33 AdventureWorksManagement

這裏的類定義:

/// <summary> 
    /// Repository for WCF agents 
    /// </summary> 
    public class AdventureWorksWCFRepository<T> : IAdventureWorksRepository<IBaseModel> where T: IProxyObjectAdapter 
    { 
     /// <summary> 
     /// WCF service end 
     /// </summary> 
     private readonly AdvWorksManagementService.EmployeeServiceContractClient servicePoint; 

     /// <summary> 
     /// Adapter used to translate WCF proxy objects to domain objects 
     /// </summary> 
     private T proxyobjectAdapter; 

    ..... 

請指點。 dormantroot

回答

0

錯誤是正確的。你映射:

IAdventureWorksRepository <IProxyObjectAdapter> - > AdventureWorksWCFRepository <IProxyObjectAdapter>

然而,在代碼中定義,AdventureWorkdsWCFRepository <牛逼>實現IAdventureWorksRepository < IBaseModel >。這不是你想要映射的界面。我懷疑IBaseModel應該是代碼中的「T」。

+0

chris:以編程方式,我是這樣做的:IAdventureWorksRepository serviceAgent = new AdventureWorksWCFRepository (new EmployeeProxyObjectAdapter());我怎樣才能達到與Unity一致? – dormantroot 2011-04-28 00:55:36