Виндзорский замок разрешить словарь‹› не удалось

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

    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>
{ 
}

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

Имеет ли это какое-то отношение к общему типу?

Пожалуйста, порекомендуйте.


person Zhen.Lee    schedule 21.07.2010    source источник
comment
что есть в словаре? что с этим делает BusinessService?   -  person Mauricio Scheffer    schedule 22.07.2010


Ответы (1)


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

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

Есть некоторые разговоры о удаление этой разницы между параметрами и службами для будущей версии Windsor.

person Mauricio Scheffer    schedule 22.07.2010