【问题标题】:c# Interfaces, Dependency Inversion and Generic Typesc# 接口、依赖倒置和泛型类型
【发布时间】:2019-03-23 04:46:57
【问题描述】:

我已经为此奋斗了一段时间。我有一个 API 可以检索 JSON 格式的数据源:

数据源:

[
 {
        "name": "Datasource 1",
        "tags": "Ds1",
        "product": 1,
        "status": 1,
        "Type": 2,
        "datasource": {
            "testurl1" : "",
            "testurl2: : ""
        }

},
 {
        "name": "Datasource 2",
        "tags": "Ds2",
        "product": 2,
        "status": 1,
        "Type": 2,
        "datasource": {
            "string1" : "",
            "string2: : ""
        }

}
]

数据源具有相同的外部属性。但是,数据源属性会有所不同。数据源属性将由它自己的一组属性组成,这些属性因数据源而异。

我创建了一个我想在不同项目中使用的接口:

public Interface IGeneral
{
   void SetTestData(TestDataModel testData);
}

但是您看到 TestDataModel 类型是一个具体类型。我已经尝试了一种策略模式并创建了一个具有通用数据源属性的 BaseDatasource 类,但我不确定最好的前进方式。

基本上,我想检索一个数据源,将其绑定到必要的 POCO 模型,实例化一个实现 IGeneral 接口的类,然后调用该类的 SetTestData 方法并传入数据源对象而不是具体类型.在 SetTestData 方法中,我会有类似这样的代码:

示例 1:

public class MyClass1 : IGeneral
{
     public void SetTestData(TestDataModel testData)
        {
            testData.product = 1;
            testData.datasource.testurl1 = "sasasas";
        }
}

示例 2:

public class MyClass2 : IGeneral
{
     public void SetTestData(TestDataModel testData)
        {
            testData.product = 2;
            testData.datasource.string1 = "dsds";
        }
}

【问题讨论】:

  • 问题是什么?
  • 你考虑过dynamic 吗?不过,我不能 100% 确定这是否是它的用例。
  • 使用Dictionary<string, object>有什么问题?

标签: c# interface dependencies


【解决方案1】:

这是否符合要求:

class DataSourceBase
{
}
class DataSource1 : DataSourceBase
{
}

class TestDataPerMarket<TDataSource> where TDataSource : DataSourceBase
{
    public int product {get;set;}
    public TDataSource datasource {get;set;}
}

public Interface IGeneral
{
    void SetTestData<TDM<TDS>>(TDM<TDS> testData) 
        where TDM : class, 
        where TDS : DataSourceBase;
}

(p.s. 我没试过编译这个!)

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多