我有一个可以处理多个规则调用的规则,因此我创建了一个放置在规则类上的自定义属性。此属性列出了允许处理的名称。在结构图中,我想通过读取自定义属性将相同的规则注册为多个名称。
[RuleIdentifer(new string[] { "RunAction1","RunAction2","RunAction3" })]
我曾尝试使用 MissingNamedInstanceIs 类,但遇到双向依赖错误。在创建后的容器中放置了以下内容:
_.For<Rules.IRule>().MissingNamedInstanceIs.ConstructedBy("Pull Rule by Name from Attribute",r =>
{
return r.GetAllInstances<Rules.IRule>().FirstOrDefault<Rules.IRule>(r1 =>
{
var dnAttribute = r1.GetType().GetCustomAttributes(typeof(RuleIdentifer), true).FirstOrDefault() as RuleIdentifer;
if (dnAttribute != null && dnAttribute.Names.Contains<string>(r.RequestedName)) return true;
return true;
});
});
在扫描部分 NameBy 调用中是否有更好的方法来执行此操作:
x.AddAllTypesOf<Rules.IRule>().NameBy(t => t.Name);