Я использую инжектор конструктора с контейнером состава MEF, и я хочу знать, как я могу заставить CompositionContainer внедрить себя в экземпляр объекта, который он предоставляет.Как получить контейнер MEF для ввода себя
ответ
Чтобы создать деталь от данного объекта, вы можете использовать один из методов CompositionContainer.ComposeExportedValue.
Вот пример:
class Program
{
static void Main(string[] args)
{
var container = new CompositionContainer(new ApplicationCatalog());
Console.WriteLine("Main: container [{0}]", container.GetHashCode());
container.ComposeExportedValue<CompositionContainer>(container);
var exp = container.GetExportedValue<ExportThatNeedsContainer>();
Console.ReadKey();
}
}
[Export]
public class ExportThatNeedsContainer
{
[ImportingConstructor]
public ExportThatNeedsContainer(CompositionContainer cc)
{
Console.WriteLine("ExportThatNeedsContainer: cc [{0}]", cc.GetHashCode());
}
}
Это работает, однако инъекции контейнера в части, насколько я знаю, не является «нормальным» потребительная случай MEF.
+1 для «инъекции контейнера в деталь, насколько я знаю, не является« обычным »вариантом использования MEF». Это будет красный флаг с любым контейнером IoC. – MattDavey
Я не уверен, что он может работать. Представьте, что у вас есть контейнер с тремя классами, один из них также содержит сам контейнер, который содержит три класса. Это будет stackoverflow :)
- 1. Контейнер для инъекций MEF
- 2. IoC/MEF контейнер
- 3. В MEF, где находится контейнер для ImportingConstructor?
- 4. MEF. Как загрузить winform в контейнер winform?
- 5. MEF. Как очистить контейнер по умолчанию?
- 6. Как остановить контейнер внутри себя?
- 7. Импорт плагинов MEF в контейнер DI/IOC
- 8. Почему MEF-контейнер недоступен в модулях?
- 9. Добавление сборки в контейнер MEF после составления
- 10. добавление экспортированных частей в существующий контейнер MEF
- 11. Как заменить экспортированную часть/объект в контейнер MEF?
- 12. Как использовать MEF для запуска группы классов?
- 13. Как получить контейнер для Autofac для WebAPI2?
- 14. MefContrib: Как экспортировать контейнер для композиции
- 15. MEF Throws CompositionContractMismatchException
- 16. MEF Контейнер не может составлять часть от общей Ассамблеи
- 17. fs.readFile себя по-разному Внутри Docker Контейнер
- 18. Весенний контейнер, контейнер для тары?
- 19. Как настроить контейнер для холста на основе ввода пользователем?
- 20. Сотрудничество Unity и MEF
- 21. Как получить один контейнер из другого контейнера?
- 22. Каталог MEF Каталог
- 23. Использовать контейнер IoC для архитектуры плагина
- 24. MEF vs. any IoC
- 25. Как я могу получить экспортированное значение MEF именем класса?
- 26. Как зарегистрировать тип кода с помощью MEF?
- 27. MEF: замена для ПРИЗМ?
- 28. Валидация для виджета ввода не ведет себя так, как ожидалось
- 29. MEF и DirectoryCatalog
- 30. Выберите контейнер для DialogFragment
Делая это, вы по существу отходите от инъекции зависимостей и к [шаблону локатора службы] (http://en.wikipedia.org/wiki/Service_locator_pattern). Это может отрицательно сказаться на ремонтопригодности вашего приложения. – MattDavey