dea*_*vmc 5 c# dependency-injection anti-patterns
我已经构建了一个小的静态对象,用于将泛型类型保存到WP7上的独立存储.这适用于较旧的项目,但有些新项目使用DI来管理配置.我是DI的粉丝,因为这意味着我可以在一个地方更改配置并将其过滤到所有依赖项.
我的想法是创建一个名为Injection的命名空间,并将该对象包装在一个带有接口的实例中,以便我可以将其注入.它还使我能够为需要更具体实现的存储处理程序换出存储处理程序.
这是常见做法还是反模式?
作为一个注释,我想保持静态选项不是每个人都需要或可以使用DI.我只是尝试以最少的重复次数启用它们.
你总是这样看.主要是处理已经静态或密封或未实现任何接口的遗留代码.虽然是基类而不是接口,但HttpContextBase是我能想到的最突出的例子.
由于您希望保留静态选项,这基本上就是您目前所处的情况,因此请继续执行.Injection但是,我不会创建命名空间,因为该名称更多地讲述了机制而不是对象所扮演的角色.
你不写究竟如何类是静态的,但我假设我们正在谈论与静态方法静态类.
稍微更优雅的解决方案(如果你可以稍微更改一下)是将静态类转换为Singleton.然后它可以是静态的并同时实现接口:
public class Foo : IFoo
{
private readonly static Foo instance = new Foo();
private Foo() { }
public static Foo Instance
{
get { return Foo.instance; }
}
// IFoo member:
public void InterfaceFoo()
{
Foo.LegacyFoo();
}
public static void LegacyFoo()
{
// Implementation goes here...
}
}
Run Code Online (Sandbox Code Playgroud)
我认为实现这种解决方案所需的唯一重构是使类本身具体化,并使其作为Singleton实现接口.
旧客户端仍然可以通过调用来访问其方法 Foo.LegacyFoo();
| 归档时间: |
|
| 查看次数: |
2138 次 |
| 最近记录: |