为什么 Unity 自定义 BuilderStrategy 即使在设置现有属性后仍返回 null

发布于 2024-11-14 22:03:24 字数 1060 浏览 2 评论 0原文

我正在使用 Unity 版本 2(随 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 变量结果为空。为什么?

I'm using version 2 of Unity (that comes with Prism4). I'm trying to write an extension that can return enumerable of a non registered type. Following code is what I've written but I'm getting null after resolve call.

        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 variable turns out to be null. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-11-21 22:03:24

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

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

Add the strategy to the Strategies collection, not the BuildPlanStrategies.

BuildPlanStrategies is for constructing the objects that will construct the resolved objects. That's not what you're doing - you're just returning the objects directly. I'm surprised you got null, actually - I would have expected an invalid cast exception in there somewhere.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文