C# - 构造函数中的类型参数 - 无泛型

标签 c# type-parameter

我有一个类正在尝试对其进行单元测试。该类是 WCF 服务类。 (让它成为泛型类不是我的目标。)

我有一个在许多方法中实例化的数据访问层 (DAL) 类型(称为 UserDAL)。要测试这些方法,我需要模拟这个局部变量。 (UserDAL 的每个实例中都有特定于方法的值,因此将其更改为类级别变量会导致代码困惑,因此我宁愿不这样做。)

我认为最好是重载构造函数并传入一个类型以在本地方法中使用。空参数构造函数仍将创建一个普通的 UserDAL,但重载的构造函数将具有实现 IUserDAL 的模拟类型。

我不确定要传递类型的语法。请注意,我不是要传递一个变量,而是一个类型。

例子:

public class MyWCFClass: IMyWCFClass
{
    private TypeParam _myUserDALType;
    public MyWCFClass()
    {
        _myUserDALType = UserDAL;
    }
    public MyWCFClass(TypeParam myUserDALType)
    {
        _myUserDALType = myUserDALType;
    }

    //methods to use it
    public MyMethod()
    {
        IUserDAL userDAL = new _myUserDALType();
        //Call method in IUserDAL
        userDAL.CreateUser();
    }


    // Several similar methods that all need a different UserDAL go here
    .....
}

所以,我不知道 TypeParam 是什么类型(我编的),或者这种想法是否可能。

如果您有一个非泛型解决方案,那就太好了。

最佳答案

您真正需要的是依赖注入(inject),但您可以通过传入类型参数然后在需要时使用 Activator.CreateInstance(Type) 创建对象来实现。

至于做真正的 DI(这将使做这个测试更容易),我知道 Spring.Net工作得很好。

关于C# - 构造函数中的类型参数 - 无泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1849733/

相关文章:

c# - 如何将 CLOB 字段读入 C# 变量?

scala - Scala 中的类型边界和模式匹配

用于泛型类型及其类型参数的 Scala 类型推断 - 为什么它不起作用?

c# - 从类型参数设置的类型参数

scala - scala 中的循环类型参数定义

c# - 获取联系人的 TFS 项目

c# - 将 txt 转换为 rtf

Java IdentityHashMap 的 C# 等价物

C#多态——从DLL文件加载类

java - 泛型方法]在JAVA中扩展多种类型参数