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