C# 在.net core的服务容器中捆绑项目的最佳实践

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

我想将我要添加到DI容器中的所有类放入它们自己的类中。我不想只是有一个大的长启动文件

我所做的是将此添加到我的
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
类型上的扩展方法扩展方法没有问题。您可以对注册的每种服务类型使用扩展方法(如果您正在开发库)。这是正常的推荐方法