何处将连接字符串保存在IoC模式中?
在我永恒的追求中,我现在正在检查mvc Turbine做IoC的肮脏工作。
我使用mvc Turbine书呆子晚餐例子作为主角,而且事情看起来相当逻辑。 虽然我指的涡轮项目在这里,我猜理念的背后是一些一般的图案 安全的一些阅读和罕见的播客,我是新来的国际奥委会概念,我有几个问题。何处将连接字符串保存在IoC模式中?
到目前为止,我对每个IRepository我要注册
例如一个IServiceRegistration项:
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, UserRepository>();
}
}
具体实施IUserRepository的需要一些配置虽然。类似于连接字符串,或者在此情况下是要使用的db4o文件的路径。
我应该在哪里提供这些信息?
罗伯特和卢卡斯两人都用他们的答案击中头部。账户中的所有“额外东西”都将存在于UserRepository类中。这是目前涡轮ND的实施方式。
然而,没有什么可以阻止您创建了一个名为ConnectionStringProvider新类在UserRepository然后可以“注入”将提供连接字符串(不管它是硬编码或者从一个配置文件读取。
的代码如下:。
public class ConnectionStringProvider {
public string ConnectionString {
get{
// your impl here
}
}
}
public class UserRepository {
public UserRepository(ConnectionStringProvider provider){
// set internal field here to use later
// with db connection
}
}
从这里,你UserRepositoryRegistration类中添加一个登记ConnectionStringProvider和涡轮机将完成剩下的事情你
在一般情况下,这仅仅是一个需要连接字符串或数据库路径的具体UserRepository的关注。通过在应用程序配置文件中放置路径并让具体的存储库直接提取配置数据,您可以做得很好。
并非所有的仓库都将需要此信息,这是你必须摆在首位抽象的原因之一。例如,一个快速内存的具体IUserRepository将不需要数据库的路径或可能需要任何额外的配置才能工作。
与罗伯特类似,我建议将这个放到应用程序配置文件中,但是,每个注入类型都有特定的条目。这样您的连接字符串或路径可以在每次注入时自定义。
谢谢,这是一个很好的解决方案虽然英里。 ght最初看起来像是过度使用,我目前在web.config文件中有连接字符串,但是我们正在计划将所有应用程序的所有配置都放在数据库中,并且仅为应用程序提供对该数据库的引用。那么我会更喜欢配置的东西是可插入的。 – 2009-12-03 22:10:17
也感谢您注册以回答此问题。希望您享受您在SO的逗留 – 2009-12-04 07:07:18