0
我正在尝试解决注册我的配置类时遇到的问题。我在我的安装程序如下:如何使用Castle Windsor的Generic FactoryMethod自动注册组件使用Castle Windsor
首先注册我的开放式泛型工厂
container.AddFacility<FactorySupportFacility>()
.Register(Component.For(typeof (IConfigurationProvider<>))
.ImplementedBy(typeof (AppSettingsConfigurationProvider<>)));
然后我正尝试注册所有混凝土IMPL。的IConfiguration,我需要使用我注册的impl。 IConfigurationProvider来解决它们。
问题是,我厂是这样的:
public class AppSettingsConfigurationProvider<TConfiguration>
where TConfiguration : class, IConfiguration, new()
{
public TConfiguration Build()
{
var config = new TConfiguration();
var properties = typeof(TConfiguration).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var p in properties)
{
if (!p.CanWrite)
continue;
if (p.GetSetMethod(false) == null)
continue;
var settingsKey = string.Format("{0}.{1}", p.ReflectedType.FullName, p.Name);
p.SetValue(config, Convert.ChangeType(ConfigurationManager.AppSettings[settingsKey], p.PropertyType), null);
}
return config;
}
}
所以我需要设置泛型类型。
是否有办法来摆脱这一点,所以我不需要一个像这样一个注册每个配置组件:
container
.Register(
Component.For<DummyConfiguration>()
.ImplementedBy<DummyConfiguration>()
.UsingFactoryMethod(kernel => kernel.Resolve<IConfigurationProvider<DummyConfiguration>>().Build()));
我宁愿更自动化的方式来注册我的配置成品的配件。
是的,它确实解决了问题,谢谢Krysztof!但是,让我们说我想从其他商店,例如数据库加载我的配置。是否有办法注册实现IConfiguration的所有配置组件,然后让Windsor自动推断注册的IConfigurationProvider <>组件的类型? – 2011-06-13 07:22:41