有时我需要获取某些构造信息的类。我不是在谈论到其他对象(其将被注入),但有关(例如)的字符串,其持有唯一的参考信息:DI容器:如何将配置传递给对象
// Scoped as singleton!
class Repository
{
public Repository(InjectedObject injectedObject, string path) { ... }
}
你如何得到这个字符串注入?一个方法可行是编写Init()
方法并避免喷射的字符串:
class Repository
{
public Repository(InjectedObject injectedObject) { ... }
public void Init(string path) { ... }
}
另一个可能性是所述信息包装成一个对象,其中可被注入:
class InjectedRepositoryPath
{
public InjectedRepositoryPath(string path) { ... }
public string Path { get; private set; }
}
class Repository
{
public Repository(InjectedObject injectedObject, InjectedRepositoryPath path) { ... }
}
这样我d在我的DI容器的初始化期间必须创建一个InjectedRepositoryPath
的实例并注册这个实例。但是我需要为每个类似的类提供这样一个独特的配置对象。
我当然可以解决RepositryFactory
代替Repository
对象,因此工厂会问我要的路径:
class RepositoryFactory
{
Repository Create(string path) { ... }
}
但同样,这是一个工厂只为一个单独的对象...
或者,最后,由于路径将会从配置文件中提取,我可以跳过字符串周围的传球和我的构造函数读取配置(这可能不是最优的,但有可能):
class Repository
{
public Repository(InjectedObject injectedObject)
{
// Read the path from app's config
}
}
你最喜欢的方法是什么?对于非单身人士课程,您必须使用imho Init()
或工厂解决方案,但单身人士范围的对象又如何?
非常有趣的链接,谢谢你的答案! – tanascius 2010-02-22 16:20:20