【发布时间】:2011-01-31 14:05:56
【问题描述】:
我有以下接口:
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<>));
它工作正常。为了获得“用户设置”,我使用以下代码:
var userSettingsProvider = builder.Resolve<IConfigurationProvider<UserSettings>>();
var userSettings = userSettingsProvider.Settings;
问题:我应该如何配置“ContainerBuilder”,以便我可以通过以下方式解决某个“ISettings”:
var userSettings = builder.Resolve<UserSettings>();
Autofac 可以吗?
提前致谢
【问题讨论】: