Групування залежних залежностей у спеціальні методи розширення - це дуже поширений спосіб зробити це. ASP.NET Core вже робить це для багатьох внутрішніх служб, і ви можете легко розширити поверх цього і налаштувати їх так, як потрібно для вашої програми. Наприклад, щоб встановити автентифікацію та авторизацію:
public IServiceCollection AddSecurity(this IServiceCollection services)
{
services.AddAuthentication()
.AddCookie();
service.AddAuthorization(options =>
{
options.DefaultPolicy = …;
});
return services;
}
Ви можете зробити те ж саме для служб, що стосуються додатків, і згрупувати їх логічно в окремі методи розширення.
Якщо у вас дуже багато подібних реєстрацій послуг, ви також можете використовувати реєстрацію на основі конвенції, наприклад, використовуючи Scrutor . Наприклад, це реєструє всі сервіси в певному просторі імен як перехідні для відповідного інтерфейсу:
services.Scan(scan => scan
.FromAssemblyOf<Startup>()
.AddClasses(c => c.InNamespaces("MyApp.Services"))
.AsImplementedInterfaces()
.WithTransientLifetime()
);
Scrutor дозволяє виконувати дуже складні правила сканування послуг, тому, якщо ваші служби дотримуються певної схеми, ви, ймовірно, зможете придумати для цього правило.