最近,我开始使用.NET Core 2.1进行新项目,我决定使用SOLID原理并创建一个不错的项目结构。
这是一个Web API项目。一切工作正常,我使用了大量的依赖注入,大多数内容都很容易测试。
那是我必须注册所有服务的部分。我的字面上有几百行,像这样:
services.AddSingleton<...>();
或
services.AddScoped<...>();
对于每项服务,我都有一条线路,对于一个小型项目,那会很好。但是,当我有成百上千的东西时,它就变得一团糟。基本上,整个项目的顺序都非常好,并且出现了充满了services.AddX语句的Startup.cs。
我当时想用注册服务的方法创建静态类,但是看起来并不好。
将来我将需要添加更多服务,而我不能只是继续创建静态类或填充旧类,因为我将再次陷入同样的混乱,这将使我更难记住我在哪里注册给定的服务。
答案 0 :(得分:1)
如果确实有数百个,则可能要用例如Autofac替换默认容器。这些类型的框架支持模块或某种“子容器”。
模块是一小类,可用于将一组相关组件捆绑在“外墙”后面,以简化配置和部署。
答案 1 :(得分:1)
您可以让每个逻辑服务组(分别)导出其自己的RegisterServices方法。该组件的责任是无论如何都要选择生存期和范围。
对于化妆品,在AddMyStuff()
名称空间中使其成为Microsoft.Extensions.DependencyInjection
扩展方法。
有关示例,请参见AddMvc()
。查找它( F12 ),注意程序集及其所在的名称空间之间的区别。