C#4を使用すると、MEFの遅延初期化を利用できます。http://msdn.microsoft.com/en-us/library/dd986615.aspxを参照してください
// So I have this member, populated through MEF.
private Lazy<MyItem, ISomeInterface> item;
public Lazy<MyItem, ISomeInterface> Item
{
get
{
return item;
}
set
{
item = value;
}
}
さて、MyItem
この怠惰なメンバー変数に割り当てたいインスタンスがある場合はどうなりますか?これは動作しません:
var myItem = new MyItem(); // Implements ISomeInterface
o.Item = myItem; // Cannot convert type...
更新:サンプルを少し単純化しすぎました。ここでの問題は、(MEF
プラグインマネージャーからの)遅延評価されたアイテムがあることですLazy<MyItem, ISomeInterface>
。これらのアイテムはすでにインスタンス化されており、次のように構成を要求する場合があります。
var item = new Lazy<MyItem, ISomeInterface>(obj);
ただし、これにより、MissingMemberException
「
遅延初期化された型には、パブリックなパラメーターなしのコンストラクターがありません。」が発生します。
Q :(を実装する)Lazy<T, U>
のインスタンスで変数を割り当てるにはどうすればよいですか?T
U