Nano Hash - криптовалюты, майнинг, программирование

Prism v4, сервис MEF

У меня есть приложение Windows WPF, которое использует элемент управления ленты ms для меню. В моем инфраструктурном проекте я хочу иметь общую службу, на которую будут ссылаться все модули. Затем каждый модуль будет использовать эту службу для определения того, какие пункты меню должны отображаться для модуля.

Я прочитал этот Prism + MEF: отложил экспорт службы из prism-module но не могу заставить другие мои модули распознавать службу.

Служба

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");
        }
    }
}

Модуль

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 с момента ее импорта. Есть идеи, что мне не хватает?

08.02.2011

Ответы:


1

Импорт свойств никогда не будет установлен во время работы конструктора, поскольку вы не можете установить свойства объекта, пока он не будет построен.

Другая проблема заключается в том, что в InfModule вы слишком поздно устанавливаете экспортированное значение. MEF проверяет значение для экспорта только один раз, после чего кэширует значение и больше не вызывает геттер. В этом случае экспорт выполняется до вызова Initialize (). Логика для установки экспорта должна запускаться либо из конструктора, либо из кода в средстве получения свойств.

08.02.2011
  • Спасибо, что решили это. Я инициализировал MenuService в получателе и добавил IMenuService в качестве аргумента в ImportingConstructor в модуле. Я закомментировал строку ModuleDependency, и она все еще работает ... не совсем понимаю, почему. 08.02.2011
  • @Chris Klepis: это потому, что порядок инициализации модуля падает там, где вы этого хотите. Добавление ModuleDependency гарантирует, что заказ попадет туда, куда вы хотите. Если у вас действительно есть зависимость, вы захотите добавить эту зависимость обратно, чтобы в дальнейшем не возникало проблем. 08.02.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..