是否值得为.Net中的非MVC项目设置IoC?

时间:2011-03-14 12:04:27

标签: .net wcf inversion-of-control castle-windsor

我到处寻找有关Windsor或Spring.net的信息,它总是参考MVC。试图为Web表单项目或wcf实现它有什么意义吗?

5 个答案:

答案 0 :(得分:5)

IoC在任何类型的项目中同样有用。它解决的问题(可测试性等......等等)并不特定于任何特定类型的项目。

答案 1 :(得分:5)

事实上,由于处理请求的方式,ASP.NET MVC Web应用程序的性质非常适合IoC。您可以说Web应用程序的启动请求 - 响应生命周期以及ASP.NET MVC处理这些事情的方式直接对应于KrzysztofKoźmic所称的The Three Calls Pattern以及Mark Seemann所称的Register Resolve Release pattern

然而,即使在直接适用于它的应用程序中,也有一些方法可以遵循这种模式 - 例如在WinForms应用程序,Windows服务等。

< shameless_plug>

我写了a blog post关于Castle Windsor的TypedFactoryFacility,这是Windsor的一个功能,允许在没有你的代码知道的情况下调用容器,真正的IoC风格。

类型化的工厂设施使Windsor能够动态实现接口,例如, ISomeFactory,将调用委托给下面的容器Resolve方法,从而允许您的代码仅依赖于ISomeFactory接口。

< / shameless_plug>

答案 2 :(得分:3)

控制反转(a.k.a.依赖注入或第三方连接)只是启用松散耦合的一种方法。

据我所知,只有两种方法可以实现松散耦合:IoC或服务位置(which is an anti-pattern)如果要在任何应用程序中启用松散耦合,IoC是这样做的方法。

松耦合带来很多好处:

  • 可测
  • 延迟装订
  • 降低复杂性(SOLID)/更好的可维护性
  • 扩展
  • 并行开发

它与任何特定的架构,模式或应用类型无关。

答案 3 :(得分:0)

是的,如果架构调用/允许它。它取决于整个应用程序的设计,而不仅仅是使用的UI框架。

例如,如果WebForms项目将所有内容抛入代码隐藏中并直接从Page_Load等访问数据库,那么使用IoC(或任何类型的重新分解)将会很困难。

但是,如果WebForms是访问服务或与访问服务或使用存储库等的模型交互,那么这些后端对象可以注入某种服务定位器,例如IoC框架。连接到WebForms类的构造函数可能并不容易(甚至可能,我认为我从未尝试过),但您仍然可以根据需要解决类中的依赖关系(例如,后期绑定的类属性) )。

答案 4 :(得分:0)

IoC与MVC完全无关。它们是两种完全不同的设计模式。

您是否在应用程序中使用IoC取决于您的设计。 YAGNI?然后忘记它。类之间有很多依赖性使测试变得困难?立即注册。

IoC框架并不关心您用于实现应用程序的设计模式。所以在你的aspx文件中有MVC或10k行代码,这并不重要。