Регистрация экземпляров в MEF - PullRequest
4 голосов
/ 16 мая 2010

Я должен зарегистрировать экземпляр объекта в контейнере. Я не могу использовать универсальный ComposeExportedValue<T>, так как я не знаю, что такое T во время компиляции.

Мне нужен следующий метод: container.RegisterInstance (Type someType, instance object)

Есть идеи?

1 Ответ

2 голосов
/ 16 мая 2010

Вот версия ComposeExportedValue, которая не является общей:

public static void ComposeExportedValue(this CompositionContainer container, string contractName, object exportedValue) {
    if (container == null)
        throw new ArgumentNullException("container");
    if (exportedValue == null)
        throw new ArgumentNullException("exportedValue");
    CompositionBatch batch = new CompositionBatch();
    var metadata = new Dictionary<string, object> {
        { "ExportTypeIdentity", AttributedModelServices.GetTypeIdentity(exportedValue.GetType()) }
    };
    batch.AddExport(new Export(contractName, metadata, () => exportedValue));
    container.Compose(batch);
}

public static void ComposeExportedValue(this CompositionContainer container, object exportedValue) {
    if (container == null)
        throw new ArgumentNullException("container");
    if (exportedValue == null)
        throw new ArgumentNullException("exportedValue");
    ComposeExportedValue(container, AttributedModelServices.GetContractName(exportedValue.GetType(), exportedValue);
}
...