Я думаю, это зависит от того, что является подключаемым компонентом.
Некоторые вещи должны быть провайдерами. Например, если вы используете функции от стандартного поставщика членства ASP.NET, вы должны извлечь свою функциональность из этого. В этих ситуациях я обнаружил, что достаточно просто написать своего рода «прокси-провайдер», который выполняет разрешение зависимостей и передает вызов реализации, зарегистрированной в DI.
Например, если у вас есть Autofac, подключенный к MVC DependencyResolver, вы можете увидеть что-то вроде этого в вашем членском провайдере:
public override bool ChangePassword(
string username,
string oldPassword,
string newPassword)
{
var provider = DependencyResolver.Current.GetService<IMembershipService>();
return provider.ChangePassword(username, oldPassword, newPassword);
}
Я не нашел никаких автоматических функций, позволяющих отделить встроенные поставщики.
Для вещей, которые не являются поставщиками, просто используйте функциональность IoC как обычно. Я предпочитаю IoC без конфигурации, использующий функции сканирования сборок Autofac и , которые позволят вам в основном поместить сборку с переопределениями в папку bin и перезапустить приложение. Сканирование любых модулей при запуске и регистрация их. Если вы хотите быть более явным, вы можете создать свой собственный интерфейс запуска, например ...
public interface IMyStartup
{
void Start(ContainerBuilder builder);
}
... а затем отсканируйте только ваш конкретный интерфейс и вызовите метод start для этого. Существует множество способов сделать это (атрибуты, типы, сборки в определенном известном месте и т. Д.), Но все сводится к сканированию сборки.