为什么Unity自定义BuilderStrategy即使在设置Existing属性后也返回null

时间:2011-06-11 19:20:51

标签: .net unity-container prism unity2.0 objectbuilder

我正在使用Unity的第2版(Prism4附带)。我正在尝试编写一个可以返回非注册类型的可枚举的扩展。下面的代码是我写的,但是在解析调用后我得到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());
        }

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

1 个答案:

答案 0 :(得分:1)

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

BuildPlanStrategies用于构造将构造已解析对象的对象。这不是你正在做的事 - 你只是直接返回对象。我很惊讶你得到了null,实际上 - 我本来期望在那里有一个无效的强制转换异常。