在我不断追求吸吮的过程中,我正在检查mvc Turbine做IoC肮脏的工作。
我正在使用mvc Turbine书呆子晚餐的例子作为领导,到目前为止事情看起来相当合乎逻辑。
虽然我在这里提到涡轮机项目,但我猜测它背后的哲学是模式的一般性
对于一些阅读和罕见的播客来说,我是IoC概念的新手,我有几个问题。
到目前为止,我为每个要注册的IRepository都有一个IServiceRegistration条目 例如:
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, UserRepository>();
}
}
IUserRepository的具体实现需要一些配置。类似于连接字符串的东西,或者在这种情况下是要使用的db4o文件的路径。
我应该在何处以及向谁提供此信息?
答案 0 :(得分:3)
罗伯特和卢卡斯都以他们的答案击中了头部。帐户的所有“额外内容”都将存在于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将为您处理剩下的事情。
答案 1 :(得分:2)
通常,这仅仅是需要连接字符串或数据库路径的具体UserRepository的关注点。您可以通过删除应用程序配置文件中的路径并让您的具体存储库直接提取配置数据来做到这一点。
并非所有存储库都需要此信息,这是您首先获得抽象的原因之一。例如,快速内存中的具体IUserRepository不需要数据库的路径,也不需要任何其他配置才能工作。
答案 2 :(得分:1)
与Robert类似,我建议将其放入应用程序配置文件中,并为每种注入类型指定特定条目。这样,每次进样都可以自定义连接字符串或路径。