2016-10-03 2 views
0

При использовании lightinject можно ли использовать строковое значение из внешнего файла конфигурации, чтобы сообщить контейнеру о регистрации службы, как указано в файле? Это будет в файле xml или файле web.config.Устранить зависимость через файл xml или web.config с помощью lightinject

Например, в рамках предыдущего проекта в моем web.config я бы следующую строку

<add key="PersonRepository.Interface.IPersonRepository" value="PersonRepository.Db.DbRepository, 
    PersonRepository.Db, Version=1.0.0.0, Culture=neutral"/> 

я мог бы получить значение через WebConfigurationManager вызова. В этом примере создается конкретное имя класса PersonRepository.Db.DbRepository в виде строки, которое затем может использоваться для разрешения зависимости. Это метод, который я использовал в прошлом, но не могу понять, как сделать то же самое с lightinject. Это возможно?

Извините, если это немного запутано, это мой первый правильный набег на инъекцию зависимости.

Большое спасибо.


Hello again. Я пробовал пару дней, чтобы реализовать метод, как вы описали, и он не работает. Чтобы продемонстрировать это кратко;

var myString = "hello"; 
Type stringType = Type.GetType(myString); 
container.Register<ICloneable, stringType>(); 

Получаем ошибку из компилятора 'stringType' является переменной, но используется как тип.

При дальнейшем чтении здесь;

How to use typeof or GetType() as Generic's Template?

Кажется, это ограничение языка. Любые мысли, пожалуйста? Большое спасибо.

ответ

1

LightInject не работает непосредственно с файлами XML, но вы можете иметь доступ к обоим типам, типу службы и типу реализации через диспетчер конфигурации. Затем вам нужно будет разрешить типы, используя что-то вроде Type.GetType (typeName), а затем зарегистрировать службу в контейнере.

Это, как говорится, я настоятельно рекомендую вам переместить конфигурацию контейнера из файла конфигурации в код (корневой каталог). Сопоставление между типами обслуживания и реализации редко изменяется после компиляции, и вы получаете преимущества строго типизированной конфигурации.

+0

Точно, что мне нужно, спасибо за вашу помощь. – Aeptitude

+0

Привет. Я пробовал пару дней, чтобы реализовать метод, как вы описали, и он не работает. Чтобы продемонстрировать это кратко; var myString = "hello"; Тип stringType = Type.GetType (myString); container.Register (); Я получаю ошибку из компилятора 'stringType' - это переменная, но используется как тип. При дальнейшем чтении здесь; http://stackoverflow.com/questions/302577/how-to-use-typeof-or-gettype-as-generics-template Кажется, это ограничение языка. Любые мысли, пожалуйста? Большое спасибо – Aeptitude

+0

Почему мы не продолжаем это на GitHub? Создайте проблему в репозитории LightInject. Затем создайте другое репо с образцом с тем, что вы пытаетесь сделать, и мы будем использовать PR в этом репо – seesharper