C# 更新构造函数注入参数值
使用Unity框架和构造函数注入,我有以下配置:C# 更新构造函数注入参数值,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,使用Unity框架和构造函数注入,我有以下配置: <dependencyInjection> <type name="IInfoService" xmlns="http://schemas.microsoft.com/practices/2010/unity"> <alias alias="IInfoService" type="Services.IInfoService, Services" /> <alias alias="In
<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服务:
参数名称=端点值=http://development.webservices/infoservice.svc
参数名称=端点值=http://test.webservices/infoservice.svc
参数名称=端点值=http://acceptance.webservices/infoservice.svc
参数名称=端点值=http://production.webservices/infoservice.svc
我想将此更改为:
param name=endpoint value=http://[Environment].webservices/infoservice.svc
并使用参数替代设置实际值:
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 street中的每个步骤设置一个配置文件。
在配置文件中,有30个这样的部分需要检查。您使用的是哪个DI库?Spring、Autofac、Unity、Ninject、StructureMap?还有别的吗?嗨,Stevan,我用的是Unity,而不是像那样使用XML配置。在不重新编译的情况下交换依赖项通常只与所有松散耦合代码的一小部分相关:这不是问题所在。在部署到其他环境时,我不想转到所有配置值。该值在运行时不会更改。