任何人都可以向我提供一个使用IoC(structureMap / Spring.Net)来交换开发中的数据访问层中的连接字符串的示例。生产? (如果可能的话,在C#中)
谢谢
答案 0 :(得分:0)
如果我是你,我会不会这样做
但如果你真的需要,你可能不得不做这样的事情:(这可能不起作用)
<db:provider id="PRODDbProvider" provider="SqlServer-2.0" connectionString="whateveritis" />
<db:provider id="DEVDbProvider" provider="SqlServer-2.0" connectionString="whateveritis" />
<object id="genericAdoTemplate" type="CustomAdoTemplate">
<property name="DbProviders">
<dictionary>
<entry key="PROD" value="PRODDbProvider" />
<entry key="DEV" value="DEVDbProvider" />
</dictionary>
</property>
</object>
然后有一个自定义的AdoTemplate
public class CustomAdoTemplate : Spring.Data.Generic.AdoTemplate {
public object DbProviders {
get;
set;
}
public override object DbProvider {
get {
return DbProviders[GetCurrentEnvironmentKey()];
}
}
}
答案 1 :(得分:0)
不了解Spring.Net但是我通常在ASP.Net中这样做,假设您有一个接受数据库连接字符串的DAL。
<connectionStrings>
<add name="Development" connectionString="Enlist=false;MultipleActiveResultSets=True;Data Source=MYPC\SQLEXPRESS;Initial Catalog=Development;Integrated Security=True" providerName="System.Data.SqlClient"/>
<add name="Production" connectionString="Enlist=false;MultipleActiveResultSets=True;Data Source=MYPC\SQLEXPRESS;Initial Catalog=Production;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
public class MySession : ISession
{
public MySession(string connectionName)
{
// ...
}
}
ObjectFactory.Initialize(
x =>
{
x.For<ISession>()
.Use<MySession>().Ctor<string>("connectionName").Is("Development");
//.Use<MySession>().Ctor<string>("connectionName").Is("Production");
}