用DI方法处理条件子工厂的体面方式是什么? 该场景是注入到条目中的加载器对象取决于该条目的设置。最初我是将IoC容器注入工厂,并使用它来根据命名约定进行解析。但是,我真的很想保持工厂清洁的容器。依赖注入和工厂
工厂被注入到一个类中,该类将加载数据库中的所有设置,然后使用工厂创建一组条目。该设置确定在给定条目内使用哪个装载器。
编辑:更改代码以更好地突出显示实际问题。 问题是,必须同时支持多个数据库管理器,如果情况并非如此,那么它会很简单。数据库管理器类型由为特定条目存储的条目设置确定。
public class Entry : IEntry
{
private ISomething loader;
public Entry(ISomething something)
{
this.loader = something;
}
}
public class EntryFactory : IEntryFactory
{
IEntry BuildEntry(IEntrySetting setting)
{
//Use setting object to determine which database manager will be used
}
}
public class EntryManager
{
public EntryManager(IEntryFactory entryFactory)
{
var entrySettings = this.settings.Load();
foreach(var setting in entrySettings)
{
this.entries.Add(entryFactory.BuildEntry(setting));
}
}
}
我曾考虑具有子工厂,主要工厂注册和解析他们的方式,但我不知道是否有更好的方法。
您有一个运行时输入到依赖关系解析机制,所以我怀疑有一种方法来实现完整的容器独立性。所以把它推到工厂似乎是你能做的最好的。您也可能会发现[Autofac的关系类型](http://code.google.com/p/autofac/wiki/RelationshipTypes)有趣。 –
正如我看到你正在你的入门构造函数中工作,这就是为什么整个DI和工厂人员不工作的问题。 loader.Load(); 让构造函数只包含字段初始化。加载方法是做什么的?它是否用数据填充入口对象?在这种情况下,这不是一个构造函数。工厂必须准备好将加载的数据用于输入,从其他地方获取。 –