как метод OnCreationForAll работает в реестре structormap? - PullRequest
0 голосов
/ 11 сентября 2011

Мне нужно зарегистрировать все реализации интерфейса через карту структур, у меня проблема в том, что у этих экземпляров нет ctor по умолчанию, мне нужно внедрить зависимость, когда я хочу создать n экземпляр, но потому что hibernate нужен public илизащищенный 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 голосов
/ 22 июня 2012

Это старый пост, который я знаю, но я столкнулся с тем же только сегодня.

Решение оказалось намного проще, чем я думал.

Просто создайте проводку ITextColouriser, и он будет волшебным образом внедрен:)

...