2011-04-27 118 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