我需要通过structur map注册接口的所有实现,我遇到的问题是这些实例没有默认的ctor,我需要在我想创建n实例时注入依赖,但因为hibernate需要公共或者受保护的默认ctor我必须有一个受保护的默认ctor,如:
public class LengthRule : RuleBase
{
protected LengthRule()
: base(null)
{
}
public LengthRule(ITextColouriser textColouriser)
: base(textColouriser)
{
}
}
public abstract class RuleBase : IPropertyRuleObject
{
public virtual ITextColouriser TextColouriser { get; set; }
public RuleBase(ITextColouriser textColouriser)
{
TextColouriser = textColouriser;
}
}
并且为了注册这个依赖,我使用这一行
x.For<IPropertyRuleObject>().OnCreationForAll((w,e)=>e.TextColouriser=w.GetInstance<ITextColouriser>());
ObjectFactory.Initialize方法中的
但是当我想得到propertyType.RuleObjects
//每个规则对象都是IPropertyRuleObject之一
实现,TextColouriser将为null
问题是什么,我需要通过nae注册这些实现,所以我在initilaize方法中也有这一行:
x.Scan(p =>
{
p.AddAllTypesOf<IPropertyRuleObject>().NameBy(c => c.Name);
});
答案 0 :(得分:0)
这是我所知道的一篇旧帖子,但我今天面对同样的事情。
解决方案比我初想的容易得多。
只需创建ITextColouriser的接线,它就会被神奇地注入:)