Dependency injection 哪些对象应该放入依赖项容器

Dependency injection 哪些对象应该放入依赖项容器,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,可能重复: 我正在研究在下一个项目中使用Castle Windsor,并试图了解哪些对象应该放入依赖项容器中。我最初的想法是,如果一个对象访问了外部资源、电子邮件服务器、数据库、文件系统等,那么这就是进入容器的一个很好的候选对象。但是,我认为任何“使用”外部资源的对象也应该放入容器中 使用依赖项容器时,这是一种有效的方法吗?基本上,任何具有依赖项的对象(在构造函数中或通过属性)都应该放在其中,并且依赖项本身也应该放在其中。您应该考虑为要放入容器中的类创建接口或抽象基类,这样您就可以将它们模拟出

可能重复:

我正在研究在下一个项目中使用Castle Windsor,并试图了解哪些对象应该放入依赖项容器中。我最初的想法是,如果一个对象访问了外部资源、电子邮件服务器、数据库、文件系统等,那么这就是进入容器的一个很好的候选对象。但是,我认为任何“使用”外部资源的对象也应该放入容器中


使用依赖项容器时,这是一种有效的方法吗?

基本上,任何具有依赖项的对象(在构造函数中或通过属性)都应该放在其中,并且依赖项本身也应该放在其中。您应该考虑为要放入容器中的类创建接口或抽象基类,这样您就可以将它们模拟出来进行测试。

< P>依赖注入容器是一种持有某些类型的实现(主要是实现某个接口或基类)的对象,用于解析对象的依赖关系

使用DIC有三个阶段:对象具有一些“依赖项”(最好是在接口上),它们通过构造函数(例如:在Unity中使用
InjectionConstructorAttribute
)或属性(例如:在Unity中使用
DependencyAttribute
)声明这些依赖项;下一步是注册这些依赖项的实现,这可以通过代码或配置文件实现,例如(unity):

container.RegisterType(MyImplementation);
第三个阶段实际上是从容器中解析某个类型,它解析它的依赖项(以及它们的依赖项,如果它们有,等等),例如(unity):

var obj=container.Resolve();
因此,在回答您的问题时,依赖项注入容器中应该包含解析其他类型所必需的任何类型,或者具有自身依赖项的任何类型(必须在某个时候向容器注册)

我希望这有帮助:)

复制:
 container.RegisterType<IMyInterface>(MyImplementation);
var obj = container.Resolve<IMyInterface>();