c# - CaSTLe Windsor - 组件的登台与生产连接字符串参数

标签 c# asp.net-mvc castle-windsor

我一直在努力解决这个问题,虽然优雅的东西是首选,但此时任何老黑客都会做:)

我有一个注册的存储库,如下所示:

<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/

相关文章:

c# - 如何在 caSTLe-windsor 的 xml 配置中配置通用类型参数?

caSTLe-windsor - 基于基类注册类型

c# - 使用某些货币符号时自定义数字格式和字符串替换期间的意外结果

asp.net-mvc - Azure Web 角色 - 混合 MVC 和 WCF - 最佳实践

asp.net-mvc - 如何获取 View html并返回客户端

asp.net-mvc - 为什么 ASP.NET MVC Controller 类需要公开?

asp.net-mvc - 注入(inject) AutoMapper 实例

c# - 如何在 C# 中从 BindingSource 获取值

c# - 为什么我的论点似乎被 vhost.exe 覆盖了

c# - 以编程方式更改 Sharepoint 2007 列表中的字段顺序