继我在阅读这些指南: https://www.devtrends.co.uk/blog/how-not-to-do-dependency-injection-the-static-or-singleton-container依赖注入 - 尽量避免使用服务定位器
我想尽量避免使用服务定位器。 但另一方面,我没有注册startup.cs文件中的所有类型。我不认为这是正确的,所有这些内部类型在主startup.cs
引用我目前有一个工厂类具有建设者类的集合。 每个构建器类都负责创建特定的对象。 我不想提前创建所有这些构建器类,因为我可能不需要使用它们,创建它们有点繁重。 我看到了一个如何在上面的链接中实现这个功能的例子。但是startup.cs类需要知道所有这些构建器。我不认为这是合适的,我宁愿让工厂阶级成为唯一接触他们的人。我试图了解是否有某种func/action方法可以从startup.cs文件注入到我的工厂类中。这个功能/操作将负责创建/注册建设者,然后我可以在班级工厂内激活这个功能/操作。我想要这个func/action来获得接口/类/可能是构建器的名称,但使用泛型不起作用。我搜索了很多,并没有找到任何解决方案,所以我认为这是不可能的。 似乎我有2个选项: 1.使用服务定位器。这种方式只有工厂类会知道建设者。但是如果将来,如果我想改变DI,我需要“触摸”工厂类(我污染了工厂类)。希望所有的DI代码只能位于startup.cs类中。 2.在startup.cs中注册构建器,但现在startup.cs知道构建器。这有点夫妇的代码,不是真正的单一角色的责任
这将是很好的注入工厂类从startup.cs func /动作将做注册,但工厂类本身激活它。 这可能吗?
在单个类中注册类型没有任何问题。如果你想,你可以将它移动到一个配置文件。 – FCin
那么,我不喜欢配置文件,一般来说,尽量避免它们。在startup.cs中注册所有类型 - 这看起来不太健康。如果我们想要更改构建器,我们需要“离开”工厂/构建器区域并跳转到startup.cs并开始删除/添加注册。我认为这是注册一般组件的好地方,例如Logger/Configuration /等。但不是将我的所有类型加载到一个地方。 – TaLz
您不要每小时更改一次旧的依赖关系,所以我不明白问题是如何去单个文件并更改一行代码。 – FCin