Разрешить Виндзорский замок Словарь <> не удался - PullRequest
2 голосов
/ 22 июля 2010

Я сделал следующее:

    container.Register(Component.For<Dictionary<string, string>>()
                            .Instance(ServiceDictionaryInstance)
                            .Named("serviceDictionary"));

Класс потребляет компонент:

 public class BusinessService : IDecisionFilter
 {
     private readonly Dictionary<string, string> _ServiceDictionary;

  public BusinessService(IOtherInterface otherService, Dictionary<string, string> serviceDictionary)
  {
                    _OtherService = otherService,
      _ServiceDictionary = serviceDictionary;
  }
    }

Тогда Castle не может разрешить компонент Dictionary:

Ошибка: NotImplementedException Метод или операция не реализованы.Ошибка: в Castle.MicroKernel.SubSystems.Conversion.GenericDictionaryConverter.PerformConversion (строковое значение, тип targetType)

Но если я создаю другой класс:

public class DictiornayType : Dictionary<string, string>
{ 
}

вместо исходного словарявсе решено правильно.

Имеет ли это какое-либо отношение к универсальному типу?

Пожалуйста, сообщите.

1 Ответ

3 голосов
/ 22 июля 2010

Дело в том, что словарь на самом деле не компонент / сервис .Это скорее параметр для некоторого компонента / сервиса.Таким образом, вы можете просто удалить регистрацию словаря и передать экземпляр словаря в качестве параметра компоненту BusinessService при его регистрации:

container.Register(Component.For<IDecisionFilter>()
                            .ImplementedBy<BusinessService>()
                            .DependsOn(new {
                                serviceDictionary = ServiceDictionaryInstance
                            }));

Говорят, что устраняет эту разницу между параметрами и услугами для будущей версии Windsor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...