首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有ICollection<IMyInterface>依赖关系的统一解析构造函数

具有ICollection<IMyInterface>依赖关系的统一解析构造函数
EN

Stack Overflow用户
提问于 2018-03-07 12:10:37
回答 1查看 455关注 0票数 0

我在编写一个规则引擎。我有一个接口IRule,它由许多规则实现。此外,我还有一个RuleExecutor,它会注入一个IEnumerable<IRule>依赖项。

我希望Unity将一个IEnumerable<IRule>注入到所有绑定实现中,但不幸的是它无法工作。

这是我的配置:

代码语言:javascript
复制
container.RegisterType<IRule, RuleA>("a");
container.RegisterType<IRule, RuleB>("b");
container.RegisterType<IRule, RuleC>("c");
container.RegisterType<IRule, RuleD>("d");
container.RegisterType<IRule, RuleE>("e");
container.RegisterCollection<IRule>();

container.RegisterType<IRuleExecutor, RuleExecutor>(new InjectionConstructor(typeof(IEnumerable<IRule>)));

RegisterCollection是这样:

代码语言:javascript
复制
public static class UnityExtensions
{
    public static void RegisterCollection<T>(this IUnityContainer container) where T : class
    {
        container.RegisterType<IEnumerable<T>>(new InjectionFactory(c => c.ResolveAll<T>()));
    }
}

解析时,我得到以下异常消息:

RuleExecutor没有接受参数()的构造函数。

这怎么可能与团结?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-07 13:07:35

统一将所有命名实例自动注入到IEnumerable<T>中。下面是一个有用的例子。

代码语言:javascript
复制
using System.Collections.Generic;
using Unity;

class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();

        container.RegisterType<IRule, RuleA>("a");
        container.RegisterType<IRule, RuleB>("b");
        container.RegisterType<IRule, RuleC>("c");
        container.RegisterType<IRule, RuleD>("d");
        container.RegisterType<IRule, RuleE>("e");
        container.RegisterType<IRuleExecutor, RuleExecutor>();

        var executor = container.Resolve<IRuleExecutor>();
    }
}

public interface IRule { }
public class RuleA : IRule { }
public class RuleB : IRule { }
public class RuleC : IRule { }
public class RuleD : IRule { }
public class RuleE : IRule { }

public interface IRuleExecutor { }
public class RuleExecutor : IRuleExecutor
{
    public RuleExecutor(IEnumerable<IRule> rules)
    {
        // Rules RuleA through RuleE are injected here...
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49151625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档