Почему пользовательский Unity BuilderStrategy возвращает значение NULL даже после установки существующего свойства
Я использую версию 2 Unity (которая поставляется с Prism4). Я пытаюсь написать расширение, которое может вернуть перечисляемый незарегистрированный тип. Следующий код - это то, что я написал, но после вызова разрешения я получаю нулевое значение.
class EnumerableStrategy : BuilderStrategy
{
public override void PreBuildUp(IBuilderContext context)
{
context.Existing = new []{"Test"};
context.BuildComplete = true;
}
}
class EnumerableExtension : UnityContainerExtension
{
protected override void Initialize()
{
Context.BuildPlanStrategies.AddNew<EnumerableStrategy>( Microsoft.Practices.Unity.ObjectBuilder.UnityBuildStage.PreCreation);
}
}
static void Main(string[] args)
{
var container = new UnityContainer();
container.AddNewExtension<EnumerableExtension>();
var items = container.Resolve<IEnumerable<string>>();
foreach (var item in items)
Console.WriteLine(item.ToString());
}
Переменная items оказывается нулевой. Зачем?
1 ответ
Решение
Добавьте стратегию в коллекцию стратегий, а не в BuildPlanStrategies.
BuildPlanStrategies предназначен для создания объектов, которые будут создавать разрешенные объекты. Это не то, что вы делаете - вы просто возвращаете объекты напрямую. Я удивлен, что вы получили null, на самом деле - я бы ожидал где-то недопустимого исключения приведения.