OnCreationForAll方法如何在structormap注册表中工作?

时间:2011-09-11 04:13:51

标签: nhibernate structuremap

我需要通过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);
      });

1 个答案:

答案 0 :(得分:0)

这是我所知道的一篇旧帖子,但我今天面对同样的事情。

解决方案比我初想的容易得多。

只需创建ITextColouriser的接线,它就会被神奇地注入:)