C# 在.net core的服务容器中捆绑项目的最佳实践
我想将我要添加到DI容器中的所有类放入它们自己的类中。我不想只是有一个大的长启动文件 我所做的是将此添加到我的C# 在.net core的服务容器中捆绑项目的最佳实践,c#,asp.net-core,C#,Asp.net Core,我想将我要添加到DI容器中的所有类放入它们自己的类中。我不想只是有一个大的长启动文件 我所做的是将此添加到我的ConfigureServices方法中 newservicesconfiguration().SetServices(服务) 那么在这个班里我有 public class ServicesConfiguration { /// <summary> /// Adds dependency injection items to the container
ConfigureServices
方法中
newservicesconfiguration().SetServices(服务)代码>
那么在这个班里我有
public class ServicesConfiguration
{
/// <summary>
/// Adds dependency injection items to the container
/// </summary>
/// <param name="services"></param>
public void SetServices(IServiceCollection services)
{
// Scopes
services.AddScoped<AuthorizedUser>();
// Singletons
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// Transients
}
}
公共类服务配置
{
///
///将依赖项注入项添加到容器中
///
///
公共无效设置服务(IServiceCollection服务)
{
//范围
services.addScope();
//单身汉
services.AddSingleton();
//瞬变
}
}
这是最佳实践吗?我将服务作为参数传递。只是不确定在我的新类中访问它是否正确。没关系,这只是一种风格。不过要小心,不要把注册码分散得太多。我见过一些代码库,其中有大量用于配置DI的扩展方法。这使得我们很难找到注册的地方 我喜欢Autofac的模块系统。我最终得到了像UserModule
这样的东西,它包含了所有与用户相关的注册,等等。我想你可以用一种方法(例如RegisterUserServices(IServiceCollection services)
)来逻辑地分割注册。这没什么错。很多库都在IServiceCollection上执行扩展方法,这是另一种方式,但这实际上取决于首选项。为此使用类有点“丑陋”。您最好使用IServiceCollection
的扩展方法,然后使用services.AddMyServices()
调用它。其他库都是这样做的,AddMvc
或服务。AddRouting()
只不过是IServiceCollection
类型上的扩展方法扩展方法没有问题。您可以对注册的每种服务类型使用扩展方法(如果您正在开发库)。这是正常的推荐方法