我正在构建一个 MVC 3 站点,并希望使用 Spring 提供我的 Web 服务适配器的运行时注入,以便我可以在模拟服务调用中存根,而不是调用真正的交易。
var ctx = ContextRegistry.GetContext();
var serviceAdapter = (IServiceAdapter) ctx[Constants.C_ServiceAdapter];
...
serviceAdapter.doSomething();
我之前一直在 Spring 线程安全上被刺痛,其中单例不是“假的”,所以查看了 Spring 源代码以仔细检查上述是否是线程安全的。
消息来源在评论中有这个:
/// A singleton implementation to access one or more application contexts. Application
/// context instances are cached.
/// </p>
/// <p>Note that the use of this class or similar is unnecessary except (sometimes) for
/// a small amount of glue code. Excessive usage will lead to code that is more tightly
/// coupled, and harder to modify or test. Consider refactoring your code to use standard
/// Dependency Injection techniques or implement the interface IApplicationContextAware to
/// obtain a reference to an application context.</p>
我的问题:为什么使用这个不明智?仅仅是因为我们不需要的2行样板吗?AFAIK 我仍在声明最终将在配置中创建什么对象,所以看不到它如何使它更紧密地耦合?
注意:我真的不想走使用 Spring.Web dll 并通过配置完成所有 DI 的路线,如果我能提供帮助的话!
非常感谢邓肯