Я переношу приложение из Ninject в Autofac.Autofac - разрешить по имени аргумента
Мы использовали специальное соглашение об именах для инъекций настроек приложения в конструкторах:
public class Example{
public Example(AppSetting settingName){
...
}
}
AppSetting параметр был введен автоматически с помощью ConfigurationManager.AppSettings [ "settingName"].
В Ninject это было достигнуто с помощью пользовательского поставщика:
public class AppSettingProvider : Ninject.Activation.IProvider
{
public object Create(IContext context)
{
var varName = ((Context)context).Request.Target.Name;
var value = new AppSetting(ConfigurationManager.AppSettings[varName]);
if (value.Value == null)
{
... log ...
}
return value;
}
public Type Type
{
get { return typeof(AppSetting); }
}
}
Я не смог найти альтернативу для этой функции в Autofac. Если это невозможно в автоматическом режиме, я в порядке с настройкой всех настроек приложения во время начального этапа настройки.
Любая идея, что делать?
Спасибо, Вилем
Вы, вероятно, хотите использовать 'ResolvedParameter', который соответствует как имя * и * тип, а не просто' NamedParameter'. При совпадении имени и типа вы можете избежать проблемы, когда у вас есть «AppSetting myValue» в одном классе и «IValue myValue» (зависимость с тем же именем, но с другим типом) в другом классе). –
Спасибо! Мало того, что это отличное предложение, но указывая на то, что класс ResolvedParameter привел меня к гораздо лучшему решению, именно этого я и хотел. Обновлен ответ. –