首页
学习
活动
专区
圈层
工具
发布

棱镜v4
EN

Stack Overflow用户
提问于 2011-02-08 14:23:38
回答 1查看 1.8K关注 0票数 2

我有一个WPF窗口应用程序,它对菜单使用ms功能区控件。在我的基础设施项目中,我希望有一个将在所有模块中引用的共享服务。然后,每个模块将使用该服务来定义应该为该模块显示哪些菜单项。

我读过这个Prism+MEF: delayed a service export from prism-module,但无法让我的其他模块识别服务。

服务

代码语言:javascript
复制
namespace Infrastructure
{
    [ModuleExport("InfModule", typeof(InfModule), InitializationMode = InitializationMode.WhenAvailable)]
    [PartCreationPolicy(CreationPolicy.Shared)]
    public class InfModule : IModule
    {
        [Export(typeof(IMenuService))]
        public IMenuService MenuService { get; private set; }

        public void Initialize()
        {
            MenuService = new MenuService();

            MenuService.AddItem("test");
        }
    }
}

模块

代码语言:javascript
复制
namespace Classic
{
    [ModuleExport("Classic", typeof(Classic), InitializationMode = InitializationMode.WhenAvailable)]
    [ModuleDependency("InfModule")]
    public class Classic : IModule
    {
        private IRegionManager _regionManager;

        [Import(typeof(IMenuService))]
        private IMenuService menuService { get; set; }

        [ImportingConstructor]
        public Classic(IRegionManager regionManager)
        {
            this._regionManager = regionManager;

            // This shows as true
            Debug.WriteLine(menuService == null);
        }

        public void Initialize()
        {
            _regionManager.RegisterViewWithRegion("RibbonRegion", typeof(Views.RibbonTabMenu));

            // This shows as true
            Debug.WriteLine(menuService == null);
        }
    }
}

从导入调试行开始,我就希望其中一个调试行输出为false。你知道我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-08 15:48:05

在运行构造函数时,将永远不会设置属性导入,因为在构造对象之前不能设置它的属性。

另一个问题是,在InfModule中,设置导出值为时已晚。MEF只查看一次导出的值,然后缓存值,不再调用getter。在本例中,它是在调用Initialize()之前获得导出的。设置导出的逻辑需要从构造函数或属性getter中的代码运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4934198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档