2009-09-23 5 views
1

Предыстория: Я хотел распространять библиотеку для некоторых других разработчиков (что-то вроде строк SDK или инструментария, абстрагировавших некоторые внутренние веб-сервисы). Я использую Autofac, чтобы внедрять различные версии базовых сервисов, в основном для stubbing. Я хочу распространять эту сборку для широкого круга разработчиков: пользователей, которые понимают IoC, и пользователей, которые этого не делают.Имеет ли Autofac наилучшую практику для * необязательной конфигурации Xml?

Для любых опытных разработчиков они могут создавать свои собственные реализации, которые нужно вводить. В противном случае разработчик должен иметь возможность использовать сборку без конфигурации и никогда не знать или не заботиться о том, что IoC происходит под капотом.

Fun stuff: Я могу предоставить Xml-конфигурацию Autofac, или я могу программно настроить компоненты (последний предпочтительный метод). В этом случае я не буду знать, что было настроено до времени выполнения, следовательно, появилась необходимость в конфигурации Xml. Есть ли способ заставить Autofac использовать конфигурацию Xml, если она существует, иначе игнорировать ее, если она не была предоставлена?

Примечание: I может осуществить это вручную, проверив конфигурацию для конкретного раздела («autofac»); если его нет, то не называйте

builder.RegisterModule(new ConfigurationSettingsReader()); 

Есть ли лучший способ сделать это, чем проверки конфигурации вручную (желательно что-то магическое, скрытый в Autofac, как кажется, чтобы быть в состоянии сделать все, что вы спросите о ! это)

ответ

1

Единственное, что я могу видеть на autofac эта страница на вики: http://code.google.com/p/autofac/wiki/StructuringWithModules И вы в основном делают это уже. Просто запустите регистрацию XML после всех других регистраций.

Ваша программная проверка должна быть прекрасной, но я задаюсь вопросом, может ли считыватель параметров конфигурации автоматически выбрать что-либо с этим, используя определенный тип «Autofac.Configuration.SectionHandler, Autofac». Если он может автоматически выбрать это, я просто проверил бы, будет ли попытка попробовать прочитать настройки конфигурации, когда ничего не определено, приведет к сбою вашего приложения.

+0

Он ломается без конфигурации. Вы получаете исключение аргумента. «Конфигурационный раздел« XXX »не может быть прочитан», поэтому вопрос. –

+1

На самом деле я задаюсь вопросом, предпочитаете ли вы использовать MEF или какой-либо другой механизм регистрации, чтобы позволить пользователям расширять вашу библиотеку. – Min

+0

Просто примечание в ретроспективе: мы закончили тем, что отказались от этой части. IoC оказался слишком далеко досягаемым для нашей аудитории. Если мы в конечном итоге сделаем что-то подобное, вы правы. MEF определенно будет солидным подходом здесь , –

1

Чтобы проверить, имеет ли ваша конфигурация конкретный раздел, вы должны использовать ConfigurationManager.OpenExeConfiguration. Он даст вам Configuration object и оттуда проверит свойство Sections, чтобы выяснить, есть ли раздел типа обработчика раздела Autofac.