Я ищу MEF 2 (Microsoft.Composition) и хочу интегрировать его с моей существующей базой кода.Как я могу экспортировать завод и/или его метод в MEF 2?
Мое текущее кодовый имеет IFactory
интерфейс с простой подписью:
public interface IFactory<T>
{
T Create();
}
Я хотел бы зарегистрировать свои заводы, так что если я делаю экспорт на заводе, он зарегистрирован в качестве Func<T>
для завода T
мощность. Так что-то вроде этого:
[Export]
public class Factory : IFactory<Class>
{
public Class Create() => new Class();
}
Вернется новый Class
экземпляр и ссылка на метод Create
(как Func<Class>
делегат) со следующим кодом:
using (var container = new ContainerConfiguration()
// ... magic missing here.
.CreateContainer())
{
var instance = container.GetExport<Class>(); // instance is created from the Factory.Create above.
var factory = container.GetExport<Func<Class>>(); // this is a reference to the Factory.Create delegate defined above.
}
Я видел this question, но похоже, не применяется для MEF 2. В настоящее время все разные вещи, но кажется намного более легкими/оптимизированными (как рекламируется!).
Возможно ли достичь того, что я хочу делать с MEF 2?
Привет @ Метро-Смурф спасибо за ваш ответ. Я действительно понимаю, что метод - это то, что вы описываете, а не делегат. Я хочу, чтобы делегат вышел из этого метода: 'Func @delegate = new Func (factory.Create);' и затем зарегистрировать __that__ в качестве экспорта. Имеют смысл? Я также понимаю, что ваш ответ даст мне прямой экспорт «IFactory ». Однако это не то, что я ищу. Пожалуйста, обратитесь к моему вопросу, чтобы увидеть точный экспорт, который я желаю. Смотрите: магия. :) Если я запрашиваю объект класса, я на самом деле вызываю 'factory.Create' где-то. Еще раз спасибо! –
Я, вероятно, неправильно понял вопрос; Извини за это. Сегодня я могу поближе познакомиться, но несколько вещей, которые нужно учитывать: 1. Используйте экспорт свойств, который будет просто экспортировать все, что возвращается из свойства. 2. Дайте это прочитать: [Разрешение закрытых типов с помощью MEF Марк Семанн] (http://blog.ploeh.dk/2011/03/14/ResolvingclosedtypeswithMEF/) Опять же, извинения за неправильное понимание. –
Не беспокойтесь! Мы все были там. :) Я действительно знаю пост г-на Семана, но, если это возможно, искал другой маршрут. Что-то, что не требует, чтобы я указывал типы. Я просто хочу, чтобы '[Export]' 'IFactory', а MEF« только знает », как вызвать его метод« Create »и вернуть экземпляр. В Unity есть «InjectionFactory», который можно использовать при регистрации типа. Я ищу что-то сопоставимое для MEF 2. После копания я [нашел это] (https://github.com/MefContrib/MefContrib/blob/master/src/MefContrib/Hosting/FactoryExportProvider.cs), но это MEF 1. –