|
|
1
4
我已经看到即使是Ayende也在Rhino公共代码中实现了这种模式,但我建议尽可能不要使用它。在默认情况下,温莎城堡没有此代码是有原因的。结构图是的,但杰里米·米勒已经离开了它。理想情况下,您应该将容器本身与任何全局变量一样视为可疑变量。 但是,作为替代方案,您可以始终将容器配置为将IDependencyResolver解析为对容器的引用。这听起来可能很疯狂,但它明显更灵活。只要记住经验法则,对象应该调用“new”或执行处理,但不能同时调用两者。对于“call new”,替换为“resolve a reference”。 |
|
|
2
3
这可不是一门独身课。这是一个包含静态成员的静态类。是的,这似乎是一个很好的方法。 我认为JPBoodhoo甚至有这个模式的名字。 The Static Gateway pattern . |
|
|
3
2
只需注意:Microsoft模式和实践已经创建了一个通用的服务定位器( http://www.codeplex.com/CommonServiceLocator )大部分主要的国际奥委会容器将在不久的将来实施。您可以开始使用它而不是IDependencyResolver。 顺便说一句:这是解决问题的常用方法,而且效果很好。 |
|
|
4
1
这完全取决于用法。使用这样的容器称为服务定位器模式。有些情况下,它并不适合,有些情况下,它确实适用。 如果你搜索“服务定位器模式”,你会看到很多博客文章说这是一个反模式,而不是。模式只是被过度使用了(被滥用)。 对于典型的业务线应用程序,不应使用SL来隐藏依赖项。您还遇到另一个问题:如果使用根容器(而不是根容器的生命周期),则无法管理状态/生命周期。 服务定位器在基础设施方面非常适合。例如,ASP.NET MVC使用服务定位器来解析每个控制器的所有依赖项。 |
|
|
StayCool · Ninject。扩展。约定不会绑定单个接口 8 年前 |
|
|
Nickso · 通用属性和IoC(Autofac)问题 8 年前 |
|
|
LightCC · 如何在C中设置DI/IoC和/或工厂模式设计# 9 年前 |
|
|
Eitan · 使用Castle动态代理拦截所有依赖项 9 年前 |