更新构造函数注入参数值

时间:2014-10-20 10:15:14

标签: c# dependency-injection unity-container

使用Unity Framework和构造函数注入我有这样的配置:

<dependencyInjection>
  <type name="IInfoService" xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="IInfoService" type="Services.IInfoService, Services" />

    <alias alias="InternWS" type="Services.InternWS.Info, Services.InternWS" />
    <alias alias="Mock" type="Services.Mock.Info, Services.Mock" />

    <container>
        <register type="IInfoService" mapTo="Mock">
          <constructor>
            <param name="name" value="mockservice" />
          </constructor>
        </register>
        <register type="IInfoService" mapTo="InternWS" name="InternWS_Service">
          <constructor>
            <param name="name" value="InternWS_Service" />
            <param name="endpoint" value="http://staging.webservices/infoservice.svc" />
          </constructor>
        </register>
    </container>
  </type>
</dependencyInjection>

它完美无缺。

对于我的不同环境,我必须使用以下配置指向不同的Web服务:

  • param name =&#34; endpoint&#34;值=&#34; HTTP://development.webservices/infoservice.svc"
  • param name =&#34; endpoint&#34;值=&#34; HTTP://test.webservices/infoservice.svc"
  • param name =&#34; endpoint&#34;值=&#34; HTTP://acceptance.webservices/infoservice.svc"
  • param name =&#34; endpoint&#34;值=&#34; HTTP://production.webservices/infoservice.svc"

我想将其更改为:

  • param name =&#34; endpoint&#34;值=&#34; HTTP:// [环境] .webservices / infoservice.svc&#34;

并使用参数覆盖来设置实际值:

var parameterOverrides = new ParameterOverrides();
foreach(var ? in ?)
{
  var paramName = ?;
  var paramValue = ?;
  parameterOverrides.Add(paramName, paramValue.Replace("[Environment]", GetEnvironment()));
}
container.Resolve<T>(item.Name, parameterOverrides);


这是最好的方法吗?
如何找到paramName和paramValue?
这不是在运行时更改值,而是为DTAP街道中的每个步骤配置1个配置文件。 在配置文件中,有30个这样的部分,必须进行检查。

0 个答案:

没有答案