Geo*_*uer 5 inversion-of-control
假设ApplicationSettings类是应用于我的应用程序的设置的一般存储库,例如TimeoutPeriod,DefaultUnitOfMeasure,HistoryWindowSize等等......让我们说MyClass使用其中一个设置 - DefaultUnitOfMeasure.
我正确使用Inversion of Control Containers - 如果我错了,请纠正我 - 是你在构造函数中定义类的依赖关系:
public class MyClass {
public MyClass(IDataSource ds, UnitOfMeasure default_uom) {...}
}
Run Code Online (Sandbox Code Playgroud)
然后用类似的东西调用实例化你的类
var mc = IoC.Container.Resolve<MyClass>();
Run Code Online (Sandbox Code Playgroud)
其中的IDataSource已分配的具体实施和default_uom已经有线了从实例ApplicationSettings.DefaultUnitOfMeasure财产.然而,我不得不怀疑,如果所有这些篮球真的有必要跳过.我应该为自己做什么麻烦
public class MyClass {
public MyClass(IDataSource ds) {
UnitOfMeasure duom = IoC.Container.Resolve<UnitOfMeasure>("default_uom");
}
}
Run Code Online (Sandbox Code Playgroud)
是的,我的许多类最终都依赖于IoC.Container,但这是我的大多数类都会依赖的依赖项.只要类是耦合的,我似乎应该充分利用它.请敏捷的大师,告诉我哪里错了.
IoC.Container.Resolve(“default_uom”);
我认为这是一个经典的反模式,您使用 IoC 容器作为服务定位器 - 导致的关键问题是:
原始声明中有关的部分暗示您的大多数类将依赖于您的 IoC 单例 - 如果它们通过构造函数/依赖项注入所有服务,那么与 IoC 的紧密耦合应该是例外规则 - 一般来说,我对容器的唯一依赖是当我在做一些棘手的事情时,即试图避免循环依赖问题,或者由于某种原因希望在运行时创建组件,即使这样我也可以通常避免依赖于通用 IServiceProvider 接口以外的任何东西,如果我需要在原始项目之外的环境中重用组件,则允许我交换自制的 IoC 或服务定位器实现。
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |