.net 为什么Unity custom BuilderStrategy即使在设置现有属性后仍返回null

.net 为什么Unity custom BuilderStrategy即使在设置现有属性后仍返回null,.net,unity-container,prism,unity2.0,objectbuilder,.net,Unity Container,Prism,Unity2.0,Objectbuilder,我使用的是Unity的第2版(Prism4附带)。我正在尝试编写一个可以返回非注册类型的枚举的扩展。下面的代码是我编写的,但在resolve调用之后,我得到了null class EnumerableStrategy : BuilderStrategy { public override void PreBuildUp(IBuilderContext context) { contex

我使用的是Unity的第2版(Prism4附带)。我正在尝试编写一个可以返回非注册类型的枚举的扩展。下面的代码是我编写的,但在resolve调用之后,我得到了null

        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());
        }
类枚举策略:BuilderStrategy
{
公共覆盖无效预构建(IBuilderContext上下文)
{
context.Existing=new[]{“Test”};
context.BuildComplete=true;
}
}
类EnumerableExtension:UnityContainerExtension
{
受保护的覆盖无效初始化()
{
Context.BuildPlanStrategies.AddNew(Microsoft.Practices.Unity.ObjectBuilder.UnityBuildStage.PreCreation);
}
}
静态void Main(字符串[]参数)
{
var container=new UnityContainer();
container.AddNewExtension();
var items=container.Resolve();
foreach(项目中的var项目)
Console.WriteLine(item.ToString());
}

Items变量结果为null。为什么?

将策略添加到策略集合,而不是BuildPlanStrategies


BuildPlanStrategies用于构建将构建解析对象的对象。这不是你要做的-你只是直接返回对象。事实上,我很惊讶你得到了空值-我本来希望在某个地方出现无效的强制转换异常。

什么版本的Unity随Prism4?2.0提供。刚刚更新了问题