0
votes

Can someone help me with this? I'm trying to use Unity IoC for injection. Here's the code:

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

Unity is complaining at that last line. Here's the error message:

'AdventureWorksManagement.ServiceAgents.AdventureWorksWCFRepository' cannot be used as type parameter 'TTo' in the generic type or method 'Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType(Microsoft.Practices.Unity.IUnityContainer, params Microsoft.Practices.Unity.InjectionMember[])'. There is no implicit reference conversion from 'AdventureWorksManagement.ServiceAgents.AdventureWorksWCFRepository' to 'AdventureWorksManagement.ServiceAgents.IAdventureWorksRepository'. C:\My Development\My Testing Ground\MyTesting Ground\AdventureWorksManagement\ModelView\EmployeeViewModel.cs 94 33 AdventureWorksManagement

Here's the class definition:

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

     .....

Please advice. dormantroot

1

1 Answers

0
votes

The error is correct. You're mapping:

IAdventureWorksRepository<IProxyObjectAdapter> -> AdventureWorksWCFRepository<IProxyObjectAdapter>

However, in the code definition, AdventureWorkdsWCFRepository<T> implements IAdventureWorksRepository<IBaseModel>. Which is not the interface you're trying to map from. I suspect that IBaseModel was supposed to be "T" in the code.