Windsor Func <T>свойство инъекции - PullRequest
2 голосов
/ 14 февраля 2011

Используя Windsor 2.5.2, работает следующее:

public class Foo
{
    public IBar Bar { get; set; }
}

Чтобы отложить создание IBar, это также работает:

public class Foo
{
    public Foo(Func<IBar> barFactory)
    { 
    }
}

Однако, если я объединю инъекцию свойства с Func<T>, следующая ссылка приведет к пустой ссылке:

public class Foo
{
    public Func<IBar> Bar { get; set; }
}

Как я могу заставить Виндзора ввести Func<IBar>?

1 Ответ

2 голосов
/ 14 февраля 2011

Отличный вопрос, Пол. Я рад, что ты спросил.

Для неявно зарегистрированных Func s Виндзор просматривает свойство, видит его необязательным, и просто не пытается его получить, поскольку ... ну - это необязательно, так что вы наверняка довольны отсутствием Зависимость заселена.

Чтобы заполнить его, вы должны либо зарегистрировать фабрику явно

container.Register(Component.For<Func<IBar>>().AsFactory().Lifestyle.Transient);

или вы помечаете зависимость как требуется (на ComponentModel с использованием метода Require), что, вероятно, лучше всего сделать с помощью IComponentModelConstructionContributor

...