[英]Unity resolving constructor with ICollection<IMyInterface> dependency
我正在編寫規則引擎。 我有一個接口IRule
,它實現了許多規則。 此外,我有一個RuleExecutor
,它注入了IEnumerable<IRule>
依賴項。
我希望 Unity 注入一個帶有所有綁定實現的IEnumerable<IRule>
,但不幸的是它不起作用。
這是我的配置:
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>)));
注冊集合是這樣的:
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 沒有接受參數 () 的構造函數。
Unity 怎么可能做到這一點?
Unity 將自動將所有命名實例注入IEnumerable<T>
。 這是一個工作示例。
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...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.