В 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?