我一直在努力解决这个问题,虽然优雅的东西是首选,但此时任何老黑客都会做:)
我有一个注册的存储库,如下所示:
<castle>
<properties>
<myConnStr>Data Source=COMPUTERNAME\SQL2008;Initial Catalog=MyDB;Persist Security Info=True;User ID=username;Password=password</myConnStr>
</properties>
<components>
<component id="MyRepository" service="DomainModel.Abstract.IMyRepository, DomainModel" type="DomainModel.Concrete.MyRepository, DomainModel" lifestyle="PerWebRequest">
<parameters>
<connectionString>#{myConnStr}</connectionString>
</parameters>
</component>
</components>
我正在尝试设置我的配置文件,以便我不必修改各种部署选项的 myConnStr 属性部分。如果我只能在首次加载配置时建立一次连接字符串,那就很好(甚至是理想的),但我不知道在设置容器时如何设置该值。
如果我没有使用温莎城堡,我只需定义多个连接字符串,如“connectionStringStaging”、“connectionStringProduction”,然后根据我的环境(计算机名称或 URL)通过代码选择合适的连接字符串。我怎样才能对温莎城堡的属性(property)做类似的事情?修改组件的“参数”而不是“属性”也是可以接受的。
最佳答案
IWindsorContainer container = ...
container.Register(Component.For<IMyRepository>().ImplementedBy<MyRepository>()
.LifeStyle.PerWebRequest
.Parameters(Parameter.ForKey("connectionString").Eq(GetConnectionStringFromEnviroment())));
哪里GetConnectionStringFromEnviroment()
从 <connectionStrings>
获取适当的连接您的配置部分或您想要的任何地方。
如果您需要将其放在 XML 配置而不是代码中,您可以:
- 写一个
ISubDependencyResolver
对于该特定参数。 - 使用defines and ifs (如果您已经使用 xml 配置,这可能是最简单的解决方案)
关于c# - CaSTLe Windsor - 组件的登台与生产连接字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053545/