MEF容器.GetExportedValue<;T>;()实例化不创建单独的实例

本文关键字:创建 实例化 单独 实例 gt GetExportedValue 容器 lt MEF | 更新日期: 2023-09-27 18:20:34

我正在尝试从我的目录中实例化一个视图模型

当我使用Container.GetExportedValue然后初始化属性时,所有实例的属性都设置为最终值"p"的值。但当我使用标准初始化程序时,它们是可以的。

因此,在我的示例中,MEF实例示例中FormViewModel的Name属性具有以下值

CCC

但在正常情况下,示例具有这些值

ABC

它的行为就像在来自MEF容器的所有实例之间存在一些共享引用。

      var worker = new BackgroundWorker();
        worker.DoWork += (o, ea) =>
                         {
                             _forms = new ObservableCollection<FormViewModel>(
                                 FormsExplorerRepository.GetForms()
                                     .Select(p =>
                                             {
 // This way of instancing does strange stuff 
                                                 var fvm = Container.GetExportedValue<FormViewModel>();
// This is fine but of course I'm not getting the importing constructor called
                                                 var fvm = new FormViewModel();
                                                 fvm.Workspace = this;
                                                 fvm.FormId = p.FormId;
                                                 fvm.Label = p.Label;
                                                 fvm.Name = p.Name;
                                                 fvm.Disclaimer = p.Disclaimer;
                                                 fvm.CertificationText = p.CertificationText;
                                                 fvm.Schemes = FormViewModelExtensions.InitialiseSchemes(p);
                                                 return fvm;
                                             })
                                     .ToList());
                         };

以下是视图模型的构造函数

    public FormViewModel()
        : base(null, true)
    {
    }
    [ImportingConstructor]
    public FormViewModel(
        IDialogManager dialogs,
        IEventAggregator events)
        : base(null, true)
    {
        _events = events;
        _events.Subscribe(this);
        _dialogs = dialogs;
    }

我在类定义上有一个导出属性

 [Export(typeof(FormViewModel)), PartCreationPolicy(CreationPolicy.NonShared)]
public class FormViewModel 

我希望这里有足够的信息来帮助

MEF容器.GetExportedValue<;T>;()实例化不创建单独的实例

我发现了错误

我在AddExportedValue中没有使用正确的语法(我在这里评论的是错误的方式)

(container, batch) =>
{
    // batch.AddExportedValue(new FormViewModel());
    batch.AddExportedValue<Func<FormViewModel>>container.GetExportedValue<FormViewModel>);
}