Funqおよびおそらく他のほとんどの IoC コンテナーでは、これを行うだけでタイプを構成できます。
container.Register<ISomeThing>(c => new SomeThing());
MEF をすばやく拡張 (または既存の MEF 機能を使用) して、属性を使用せずに同じことを行うにはどうすればよいでしょうか。
これが私ができると思った方法です:
var container = new CompositionContainer();
var batch = new CompositionBatch();
batch.AddExport<ISomeThing>(() => new SomeThing());
batch.AddExportedValue(batch);
container.Compose(batch);
この拡張メソッドを使用すると、次のようになりCompositionBatch
ます。
public static ComposablePart AddExport<TKey>(this CompositionBatch batch, Func<object> func)
{
var typeString = typeof(TKey).ToString();
return batch.AddExport(
new Export(
new ExportDefinition(
typeString,
new Dictionary<string, object>() { { "ExportTypeIdentity", typeString } }),
func));
}
私が後で行う場合:
var a = container.GetExport<ISomeThing>().Value;
var b = container.GetExport<ISomeThing>().Value;
どちらのインスタンスも同じです。それらを異なるインスタンスに強制 (構成) するにはどうすればよいですか?
これがうまくいかない場合、MEF でこれを行うにはどうすればよいですか?