Может кто-нибудь, пожалуйста, покажет мне пример создания контейнера состава MEF в файле app.xaml.cs без использования призмы или консольного приложения, которое не представляет проблем.MEF и WPF без призмы
Exports работает, но импорт не работает, и все примеры, которые я вижу, работают только с Prism, который я не хочу использовать. Импорт будет работать, если в файле App.xaml.cs, но я не понимаю, почему импорт не будет работать в MainWindow.cs, и все в корневой сборке.
Я могу получить его, чтобы составить, если я делаю композицию в конструкторе MainWindow, но я хотел бы составить в app.xaml.cs, если это возможно.
Вот пример (на самом деле я использую mvvm, но этот пример ведет себя так же, как и код).
public partial class App : Application
{
public App()
{
ShutdownMode = ShutdownMode = ShutdownMode.OnMainWindowClose;
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Compose();
var window = new MainWindow();
window.Show();
}
public void Compose()
{
var catalog = new AggregateCatalog(new AssemblyCatalog(Assembly.GetExecutingAssembly()), new DirectoryCatalog("."));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
[Export]
public class MessagePlugin
{
public string GetMessage()
{
return "Successfully composed message";
}
}
public partial class MainWindow : Window
{
[Import]
public MessagePlugin plugin { get; set; }
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var p = plugin; <-------------------------------NULL
MessageBox.Show(p.GetMessage());
}
}
Вам необходимо создать [mcve], который иллюстрирует то, что вы пытаетесь сделать. Из этого, люди могут сказать вам, что вы ошибаетесь. – Will
Здесь вы, пример добавлен – Fab
Вы не вызывали 'Compose()' в любом месте App.xaml.cs. Или это опечатка? – vendettamit