Есть ли способ зарегистрировать типы (т.е. репозитории) для приложения mvc 6 (vnext) в библиотеках классов dnx? Я не хочу вызывать AddTransient‹,>() в классе запуска сотни раз. Для n-уровневого приложения это не лучший подход.
Как зарегистрировать типы в библиотеках классов с помощью vnext?
Ответы (2)
Базовое использование IoC vNext не имеет возможности сканирования/пакетной регистрации.
В вашем случае вы должны использовать некоторые из «больших» контейнеров ioc, таких как Ninject, Unity, StructrureMap...
В библиотеках классов вы можете следовать тому же подходу, что и остальная часть фреймворка, который использует методы расширения на IServiceCollection. например. AddMvc, AddEntityFramework и т. д.
Для автоматической регистрации ничего не существует из коробки, но я создал библиотеку, которая дает вам атрибут [ServiceDescriptor], который вы можете использовать для привязки ваших интерфейсов к вашим классам (или просто применять к классу).
Метод расширения AddAssembly(...) просто выполняет поиск всех ваших атрибутов [ServiceDescriptor] и добавляет их в коллекцию сервисов.
Затем, чтобы использовать его, вам просто нужно сделать одно из следующих действий:
Добавьте метод расширения, как указано выше, и пусть метод расширения просто вызовет
services.AddAssembly(typeof(ExtensionClassInAssembly))Я считаю это упрощением, а также позволяет удалить метод AddAssembly и заменить его чем-то другим без необходимости изменять основной класс запуска.
Добавьте вызов
services.AddAssembly(typeof(TypeInAssembly))в свой Startup.cs