#.net #unity-container #prism #unity2.0 #objectbuilder
#.net #unity-контейнер #призма #единство 2,0 #объектный конструктор #unity-container #prism #unity2.0 #objectbuilder
Вопрос:
Я использую версию 2 Unity (которая поставляется с Prism4). Я пытаюсь написать расширение, которое может возвращать перечисляемый незарегистрированный тип. Следующий код — это то, что я написал, но я получаю null после вызова resolve.
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 оказывается равной null. Почему?
Комментарии:
1. Какая версия Unity поставляется с Prism4?
2. 2.0. Только что обновил вопрос
Ответ №1:
Добавьте стратегию в коллекцию Strategies, а не BuildPlanStrategies.
BuildPlanStrategies предназначен для построения объектов, которые будут создавать разрешенные объекты. Это не то, что вы делаете — вы просто возвращаете объекты напрямую. Я удивлен, что вы получили null, на самом деле — я бы ожидал, что где-то там будет недопустимое исключение приведения.