Использование Unity IoC-контейнера - PullRequest
0 голосов
/ 28 апреля 2011

Может кто-нибудь помочь мне с этим?Я пытаюсь использовать Unity IoC для инъекций.Вот код:

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

Unity жалуется на последнюю строку.Вот сообщение об ошибке:

'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: \ My Development \ My Testing Ground \ MyTesting Ground \ AdventureWorksManagement \ ModelView \ 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

1 Ответ

0 голосов
/ 28 апреля 2011

Ошибка правильная.Вы отображаете:

IAdventureWorksRepository -> AdventureWorksWCFRepository

Однако в определении кода AdventureWorkdsWCFRepository реализует IAdventureWorksRepository * 1009>>.Который не тот интерфейс, с которым вы пытаетесь отобразить.Я подозреваю, что IBaseModel должен был быть "T" в коде.

...