MEFの初期化にデリゲートを提供
-
25-09-2019 - |
質問
は、
?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のために特別な意味を保持するべきではありません。
所属していません StackOverflow