Я новичок в MEF и начал проект по его тестированию. Я пытаюсь открыть MainForm, который будет загружать плагины на основе интерфейса. Эти плагины должны иметь возможность обмениваться информацией между ними, и MainForm должен иметь возможность общаться со всеми из них. Поэтому я начал с создания моего MainForm, который загружает плагин. Плагин - это только форма, содержащая ListBox. На MainForm у меня есть кнопка. Я хочу, чтобы эта кнопка отправила список (String) в плагин и этот плагин для загрузки этого списка (строки) в ListBox. В настоящее время, когда я нажимаю кнопку MainForm, он отправляет список в плагин. Но список не загружается в плагин ListBox. Чтобы найти проблему, я добавил новую кнопку в MainForm, чтобы убедиться, что свойство plugin действительно содержит список (строки), который я отправил. И да, список содержит все мои строки. Проблема должна быть в том, что ListBox не освежает?Обновления свойств MEF и PlugIn
Часть интерфейса:
Public Interface IPlugIn
Property PlugInName as string
Property Files As List(Of String)
End Interface
Код в Баттона MainForm:
Dim currentPlugIn As Contract.API.IPlugIn
currentPlugIn = PlugIns.Find(Function(x) x.PlugInName = "Test")
currentPlugIn.Files = IO.Directory.GetFiles("SomeFolder").ToList
Код в плагине:
<Export(GetType(Contract.API.IPlugIn))> _
Public Class UserControl1
Implements System.ComponentModel.INotifyPropertyChanged, Contract.API.IPlugIn
Public Property Files As System.Collections.Generic.List(Of String) Implements
Contract.API.IPlugIn.Files
Get
If IsNothing(_files) Then
_files = New List(Of String)
End If
Return _files
End Get
Set(value As System.Collections.Generic.List(Of String))
_files = value
OnPropertyChanged("Files")
End Set
End Property
Public Event PropertyChanged(sender As Object, e As
System.ComponentModel.PropertyChangedEventArgs) Implements
System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Public Sub OnPropertyChanged(propertyName As String)
RaiseEvent PropertyChanged(Me, New
ComponentModel.PropertyChangedEventArgs(propertyName))
End Sub
Код плагиновой XAML:
<ListBox Name="lstFiles" ItemsSource="{Binding Path=Files}"/>
В чем проблема? Я искал в Интернете примеры и нашел сотни, но ни один из них не показывает, как делать то, что я хочу делать. Как раз перед отправкой моего вопроса здесь я добавил INotifyPropertyChanged, он не разрешил проблему. Было бы лучше для меня использовать PRISM, Caliburn.Micro или MEF только будет хорошо?
Благодарим за помощь!
Я продолжаю пробовать много вещей и нашел что-то действительно странное. Я добавил кнопку HostApp, которая получает количество строк в Plugin файла и возвращает количество строк правильно. Я также добавил кнопку в PlugIn, чтобы получить количество строк в файлах, и он возвращает 0! Почему подключаемый модуль существует в «двух разных экземплярах» один в хосте и один плагин? – Chris