【问题标题】:Where to keep things like connectionstrings in an IoC pattern?在哪里保存 IoC 模式中的连接字符串之类的东西?
【发布时间】:2009-12-02 16:09:58
【问题描述】:

在我不断追求减少吸吮的过程中,我目前正在检查 mvc Turbine 来完成 IoC 的脏活。
我使用 mvc Turbine nerd 晚餐示例作为线索,到目前为止,事情看起来相当合乎逻辑。 虽然我在这里指的是涡轮机项目,但我猜它背后的理念是该模式的普遍性 对于一些阅读和罕见的播客来说是安全的,我是 IoC 概念的新手,我有几个问题。

到目前为止,我为每个要注册的 IRepository 都有一个 IServiceRegistration 条目
例如:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, UserRepository>();
    }
}

IUserRepository 的具体实现需要一些配置。类似连接字符串的东西,或者在这种情况下是要使用的 db4o 文件的路径。

我应该在哪里和向谁提供这些信息?

【问题讨论】:

    标签: c# .net configuration ioc-container


    【解决方案1】:

    罗伯特和卢卡斯的回答都一针见血。该帐户的所有“额外内容”都将存在于 UserRepository 类中。这是目前 Turbine 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 的注册,Turbine 将为您处理其余的事情。

    【讨论】:

    • 谢谢,这是一个很好的解决方案。虽然一开始可能看起来过于工程化,但我目前在 web.config 文件中有我的连接字符串,但正在计划将我们所有应用程序的所有配置都放在一个数据库中,并且只为应用程序提供对该数据库的引用。然后我希望配置的东西是可插拔的。
    • 也感谢您注册回答这个问题。希望您在 SO 过得愉快
    【解决方案2】:

    一般来说,这只是需要连接字符串或数据库路径的具体 UserRepository 的关注点。您只需将路径放在应用程序配置文件中并让您的具体存储库直接提取配置数据即可。

    并非所有存储库都需要此信息,这是您首先拥有抽象的原因之一。例如,内存中的快速具体 IUserRepository 不需要数据库路径或任何其他配置即可工作。

    【讨论】:

      【解决方案3】:

      与 Robert 类似,我建议将其放入应用程序配置文件中,但是,每个注入类型都有特定的条目。这样,您的连接字符串或路径可以在每次注入时进行自定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 2014-08-11
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多