带参数的Unity参数

时间:2016-05-20 01:56:02

标签: c# .net dependency-injection unity-container

我的应用程序使用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 - 或者 - 有一种方法可以将参数传递给构造函数参数吗?

感谢名单

1 个答案:

答案 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>();