Найдено возможное решение через SatisfyImports — Есть ли лучший способ?

#mef

#mef

Вопрос:

Есть ли лучший способ подключить зависимости?? Это зависит от одноэлементного App.Current и предоставляет функцию, которая предоставляет _container .SatisfyImports.

Есть ли более эффективный способ выполнения задач?

Вот часть моего основного класса приложения

 public partial class App : Application
{
    private CompositionContainer _container;    

    ....

    public void SatisfyImportsOnce(Object satifyMe)
    {
        _container.SatisfyImportsOnce(satisfyMe);    
    }
}
  

Вот тестовый класс, созданный спустя долгое время после вызова ComposeParts …

 public class TestClass
{
    public TestClass()
    {
       Console.WriteLine("Created a TestClass");

       ((Microsoft.Samples.XFileExplorer.App)App.Current).SatisfyImportsOnce(this);
    }
}
  

Ответ №1:

Я нахожусь в аналогичной ситуации в приложении WPF, где я хочу, чтобы экземпляр MainWindow импортировал экспорт MEF. Поскольку MEF не создает экземпляр MainWindow, он не будет удовлетворять импорту, если вы не укажете ему.

То, как вы это делаете, сработает, если вы не хотите, чтобы ваш экземпляр регистрировался для перекомпозиции. Если вы действительно хотите перекомпозицию, вам следует вызвать ComposeParts.

Перекомпозиция обновит импорт в вашем классе, если и когда они изменятся.