質問

は、

?MEFコンテナに初期化子レイジーオブジェクトを提供することが可能です

ここでは一例であります:

[Export]
public class Bar
{
  [ImportingConstructor[
  public Bar([Import] Lazy<Foo> foo)
  {
    // [..]
  }
}

TypeCatalog catalog = new TypeCatalog(typeof(Bar));
CompositionContainer container = new CompositionContainer(catalog);
Lazy<Foo> initializer = new Lazy(() =>
{
  Foo foo = new Foo();
  // foo initialization here
  return foo;
});
container.ComposeExportedValue(initializer);
CompositionBatch batch = new CompositionBatch();
container.Compose(batch);
var export = container.GetExportedValue<Bar>(); // composition fails
私はcontainer.ComposeExportedValue(新しいはFoo())を呼び出した場合、それが動作しながら、

コードのこの作品は、仕事をしません。 私は直接怠惰なオブジェクトを作成するためのデリゲートを渡すしたいと思います。それはカスタムエクスポートプロバイダーを必要とせずに可能ですか?

ありがとうございます。

役に立ちましたか?

解決

Lazy<T>は、MEFの輸入のために特別な意味を持っています。むしろLazy<T>の輸出のために文字通り探しよりも、MEFは怠惰一部がTエクスポートしてからインスタンスを探します。

あなたの輸出入のため、代わりにこのタイプを使用してみてください。

public class LazyPart<T> : Lazy<T>
{
    public LazyPart(Func<T> initializer) : base(initializer)
    {
    }
}

それは違うタイプですので、それはMEFのために特別な意味を保持するべきではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top