我的应用程序使用Unity注入依赖,问题是其中一个参数有参数。
班级定义:
public ValidationEngine(params IRuleProvider[] providers)
我想传递一个IRuleProvider的实例,但是它有统一性:
var validationEngine = new ValidationEngine(providers: new RuleProvider(HostingEnvironment.MapPath("~/Rules/Rates/upload/rules.xml")))
我尝试过以下代码:
container.RegisterType<IValidationEngine, ValidationEngine>(ValidationConstants.RatesDownloadValidator,
new InjectionConstructor(typeof(ValidationEngine), new ResolvedArrayParameter<IRuleProvider>(new ResolvedParameter<RuleProvider>())));
但我不能添加一个参数,当unity统一RuleProvider类时将使用该参数。
我是否需要创建自己的自定义ResolvedParameter - 或者 - 有一种方法可以将参数传递给构造函数参数吗?
感谢名单
答案 0 :(得分:0)
好的,这是一个解决方案。一个重点是Unity只会在命名注册时解析数组,因此我提供了名称&#34; rulesprovider&#34;在容器上注册IRuleProvider时:
var container = new UnityContainer();
container.RegisterType<IRuleProvider, RuleProvider>(
"rulesprovider",
new InjectionConstructor(HostingEnvironment.MapPath("~/Rules/Rates/upload/rules.xml")));
container.RegisterType<IValidationEngine, ValidationEngine>(
new InjectionConstructor(
new ResolvedParameter<IRuleProvider[]>()));
var validationEngine = container.Resolve<IValidationEngine>();