Mvvm 依赖注入和何时使用静态类

Mvvm 依赖注入和何时使用静态类,mvvm,dependency-injection,mef,Mvvm,Dependency Injection,Mef,静态类是否总是不受欢迎,或者是否有合适的时间使用它们 例如,实现应用程序中普遍存在的东西(比如静态类中的安全性)有意义吗?您仍然可以在静态类上使用属性注入来更改实现,如果您要使用MEF之类的东西来注入实现,那么我认为它不会妨碍您的测试。我使用静态类主要用于无状态帮助器类以及创建扩展方法时。我尽量避免使用具有state的静态类,因为正如您所提到的,它可能会妨碍测试 假设您决定向静态类添加状态。要测试依赖于其状态的此类方法,您必须找到在测试期间更改此状态的方法。这意味着您必须: 在每次测试前准备好状

静态类是否总是不受欢迎,或者是否有合适的时间使用它们


例如,实现应用程序中普遍存在的东西(比如静态类中的安全性)有意义吗?您仍然可以在静态类上使用属性注入来更改实现,如果您要使用MEF之类的东西来注入实现,那么我认为它不会妨碍您的测试。

我使用静态类主要用于无状态帮助器类以及创建扩展方法时。我尽量避免使用具有state的静态类,因为正如您所提到的,它可能会妨碍测试

假设您决定向静态类添加状态。要测试依赖于其状态的此类方法,您必须找到在测试期间更改此状态的方法。这意味着您必须:

  • 在每次测试前准备好状态
  • 每次测试后清除状态
  • 这意味着类需要提供一种方法(通过内部方法或内部属性设置器)来改变其状态,这可能是危险的。如果您想要创建不可变的类或完全封装其实现细节的类,那么您将无法轻松地测试它们(如果根本无法测试的话),并且您的测试可能会因实现的更改而更频繁地中断。即使使用MEF,也不容易做到这一点

    当然,静态类有时会为日志记录和安全性等问题提供有吸引力的解决方案。在这些情况下,我会选择一个
    静态类
    ,它将所有调用委托给
    私有只读
    字段。这样,该字段的类可以正常进行单元测试。然后可以在集成测试中测试静态类

    顺便看看.NET的。它不包括任何与您的问题相关的内容,但包含有价值的建议