MEF Container.GetExportedValue <t>()实例化不创建单独的实例</t>

时间:2012-01-15 23:57:29

标签: c# mef caliburn.micro

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

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

所以在我的示例中,MEF实例化示例中的FormViewModel的Name属性具有这些值

Ç C ç

但在正常情况下,示例中包含这些值

一个 乙 ç

表现得像来自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 

我希望有足够的信息可以帮助某人

1 个答案:

答案 0 :(得分:1)

我发现了我的错误

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

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