C# 对于我所依赖的类的接口,我应该使所有类型都通用吗?

C# 对于我所依赖的类的接口,我应该使所有类型都通用吗?,c#,dependency-injection,interface,C#,Dependency Injection,Interface,好的,所以我正在尝试解耦我的代码。我希望在接口中使用依赖注入,而不是到处使用单例。到目前为止还不错 现在,我有一个大型网络类,它使用其他网络类作为其方法的参数或返回类型。例如: public class Network { void OnServerError(NetworkConnection conection, int errorCode); } public class NetworkConnection { public NetworkError lastError

好的,所以我正在尝试解耦我的代码。我希望在接口中使用依赖注入,而不是到处使用单例。到目前为止还不错

现在,我有一个大型网络类,它使用其他网络类作为其方法的参数或返回类型。例如:

public class Network
{
    void OnServerError(NetworkConnection conection, int errorCode);
}

public class NetworkConnection
{
    public NetworkError lastError { get; }
}

public class NetworkError
{
    public string Error { get; private set; }
}
  • 为网络类创建接口是否有意义
  • 如果是,我是否需要使所有类型都通用?对于具有公共方法的类的类型,是否还需要为其创建接口?基本上继续深入类,直到所有内容都是接口或泛型类型
  • 我想为这个类创建一个接口的原因之一是,我将来可能会切换到不同的网络库,我不想到处重构,尽管我的初始接口将与我现有的网络类具有几乎相同的签名,所以我将来可能要重构它。我错过了什么

  • 您不一定需要将
    网络
    作为一个接口来利用依赖注入

    当我在一个项目的十字路口,当没有明确的理由从我的类中提取接口时,我想,“我是否要为测试场景编写这种类型的模拟实现?”

    在某些测试中,您可能希望模拟特定的场景或行为。模拟实现在这方面非常有用

    它对某些类有意义,但并非在所有情况下都有意义


    希望这有帮助

    您不一定需要将
    网络
    作为一个接口来利用依赖注入

    当我在一个项目的十字路口,当没有明确的理由从我的类中提取接口时,我想,“我是否要为测试场景编写这种类型的模拟实现?”

    在某些测试中,您可能希望模拟特定的场景或行为。模拟实现在这方面非常有用

    它对某些类有意义,但并非在所有情况下都有意义


    希望这有帮助

    对于Network类,我可能想模拟它,因为我希望我的单元测试不依赖于网络连接,只测试它负责做什么。如果是这样的话,我应该接口所有的东西吗?考虑到提取接口的成本很低(特别是在使用Resharper的情况下),许多开发人员默认使用接口(几乎是这样)的情况并不少见对于网络类,我可以看到我可能想要模拟它,因为我希望我的单元测试不依赖于网络连接,只测试它负责做什么。如果是这样的话,我应该接口所有的东西吗?考虑到提取接口的成本很低(特别是使用Resharper),许多开发人员默认(几乎)接口所有的东西是很常见的。这里真正的问题是,你的
    网络
    类是否也要注入到其他类中。。。如果是的话,那么它可能是有用的。正如Glenn的回答所指出的:DI不需要接口,它们只是有用的。然而,真正的答案完全取决于你,取决于你的要求。你是选择构造函数还是属性注入?您使用的是什么容器?这里真正的问题是,您的
    网络
    类是否也将被注入到其他类中。。。如果是的话,那么它可能是有用的。正如Glenn的回答所指出的:DI不需要接口,它们只是有用的。然而,真正的答案完全取决于你,取决于你的要求。你是选择构造函数还是属性注入?你用的是什么容器?