gpt4 book ai didi

c# - 如何在 Prism4 MEF 中创建我的类的实例?

转载 作者:行者123 更新时间:2023-11-30 22:40:32 24 4
gpt4 key购买 nike

我已经配置容器:

public class MyBootstrapper : MefBootstrapper  
{
protected override void ConfigureAggregateCatalog()
{
AggregateCatalog.Catalogs.Add(xxx.Assembly));
// other assemblies
}

protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (MainWindow)Shell;
Application.Current.MainWindow.Show();
}

protected override DependencyObject CreateShell()
{
return Container.GetExportedValue<MainWindow>();
}
}

如何在模块中创建类型 T 的实例?类型 T 在程序集中某处定义,由 MEF 配置。

我需要这样的:

var myType = XXXX.Resolve<T>();

UPD1。我的模块

[ModuleExport(typeof(CatalogModule))]
public class CatalogModule : IModule
{
private readonly IEventAggregator _event;
private readonly IUIManager _uiManager;

[ImportingConstructor]
public CatalogModule(IEventAggregator @event, IUIManager uiManager)
{
_event = @event;
_uiManager = uiManager;
}

private void Foo()
{
var vm = **How create instance of desired type here?**
}
}

最佳答案

你这样做的方式与获得 MainWindow 实例的方式相同在CreateShell方法覆盖。您所要做的就是调用Container.GetExportedValue<T>() ,它允许您直接获取实例。然而,如果你想注入(inject)一个类型,为了更松散的耦合,你需要有一个带有 and [ImportingConstructor] 的构造函数。依赖于该类型(或最好是接口(interface))的属性,或具有 [Import] 的该类型的属性属性。

通过使用 [Export] 装饰类,确保导出类型属性,并且该程序集已添加到 AggregateCatalog .

希望这有帮助;)

关于c# - 如何在 Prism4 MEF 中创建我的类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com