У меня есть следующие интерфейсы:
public interface IConfigurationProvider<TSettings> where TSettings : ISettings, new()
{
TSettings Settings { get; }
}
public interface ISettings
{
}
У меня есть следующая реализация IConfigurationProvider:
public class ConfigurationProvider<TSettings> : IConfigurationProvider<TSettings> where
TSettings : ISettings, new()
{
public ConfigurationProvider()
{
this.BuildConfiguration();
}
public TSettings Settings { get; private set; }
private void BuildConfiguration()
{
this.Settings = new TSettings();
//...load and assign properties to 'this.Settings'
//...skipped
// now 'Settings' property contains configured 'ISettings' instance
}
}
У меня также могут быть отдельные классы, реализующие интерфейс ISettings. Например,
public class UserSettings : ISettings
{
public int SomeProperty1 { get; set; }
public int SomeProperty2 { get; set; }
}
public class CatalogSettings : ISettings
{
public int SomeProperty3 { get; set; }
public int SomeProperty4 { get; set; }
}
Я использую следующий код для настройки 'ContainerBuilder': builder.RegisterGeneric (typeof (ConfigurationProvider <>)). As (typeof (IConfigurationProvider <>));
Он отлично работает . А для получения «UserSettings» я использую следующий код:
var userSettingsProvider = builder.Resolve<IConfigurationProvider<UserSettings>>();
var userSettings = userSettingsProvider.Settings;
Вопрос: как мне настроить «ContainerBuilder», чтобы я мог разрешить определенные «ISettings» следующим образом:
var userSettings = builder.Resolve<UserSettings>();
Возможно ли это с помощью Autofac?
Заранее спасибо