spring.net有什么用?

rak*_*ham 6 c# silverlight wcf spring.net

我们正在使用Silverlight和WCF服务开发应用程序.使用Spring.Net对我们有益吗?

小智 7

>>"使用Spring.Net对我们有益吗?"

我认为你的问题的精神更倾向于质疑使用IoC/DI框架的好处,而不是根据需要手动管理依赖关系.我的回答将更多地关注IoC/DI的原因和原因,而不是关注使用哪个特定框架.

正如Martin Fowler在最近的一次会议上提到的那样,DI允许您将配置与使用分开.对我来说,根据配置和使用情况考虑DI是一个单独的问题,这是开始提出正确问题的好方法.您的应用程序是否需要为依赖项配置多个配置?您的应用是否需要能够通过配置修改行为?请记住,这意味着依赖项在运行时得到解决,并且通常需要XML配置文件,因为可以在不需要重新编译程序集的情况下进行更改.就个人而言,我不喜欢基于XML的依赖配置,因为它们最终被用作"魔术字符串".因此,如果最终拼写错误的类名等,则存在引入运行时错误的危险.

另一方面,有像Ninject和StructureMap这样的DI框架允许流畅的代码内依赖关系定义.您失去了即时更改定义的能力,但您可以获得编译时验证的额外好处,我更喜欢这样做.如果您想从DI框架中获得所有内容,那么您可以从等式中消除基于XML的框架.

从Silverlight的角度来看,DI可以以各种方式使用.最明显的是定义Views与ViewModels的关系.然而,更深入地,您可以定义验证,RIA上下文依赖性等.在配置类中定义所有依赖项可以使代码无需知道如何获取/创建实例,而是专注于使用.不要忘记容器可以根据您的配置管理每个对象实例的生命周期.因此,如果您需要共享类型的实例(例如Singleton,ManagedThread等),则通过声明向容器注册的每种类型的生命周期范围来支持此功能.

我刚才意识到我在咆哮,我道歉.希望这可以帮助!


Flo*_*yon 3

如果您想更改应用程序的大部分内容而不必重写构造函数,那么 DI 框架可能会很有用。例如,您可能想要使用将通过接口公开的彗星流服务,然后决定使用专用的消息传递系统,例如 MQ 或 RendezVous。然后,您将编写一个 Mq 适配器,该适配器尊重公共外观,只需更改 spring 配置以使用 Mq 实现而不是 Comet 实现。

但是出于对Tony the Pony的热爱,不要使用 Spring.Net 为每个视图创建 MVVM/MVP/MVC 绑定,否则您将进入一个痛苦的世界。

与 parcimony 一起使用时,DI 是一个很棒的工具,为了开发人员的理智,请不要最终得到 243 个 spring 配置文件。