2012-01-15 14 views
1

別々のインスタンスを作成していないインスタンス化'p'の最終的な値の標準的なイニシャライザーを使用しても問題ありません。MEF Container.GetExportedValue <T>()私はContainer.GetExportedValueを使用して、すべてのインスタンスが値にそのプロパティを設定したプロパティを初期化するとき、私は私のカタログ</p> <p>からインスタンスにビューモデルをしようとしています

ので、私の例ではMEFインスタンス化例でFormViewModelのNameプロパティは、これらの値

C C C

を有するが、正常なインスタンスの例では、これらの値

B 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

私のエラーが見つかりました

私はAddExportedValueで正しい構文を使用していませんでした(私がここでコメントしたのは間違った方法でした)

(container, batch) => 
{ 
    // batch.AddExportedValue(new FormViewModel()); 
    batch.AddExportedValue<Func<FormViewModel>>container.GetExportedValue<FormViewModel>); 
} 
関連する問題

 関連する問題