c#接口,依赖项倒置和通用类型

时间:2018-10-18 11:28:01

标签: c# interface dependencies

我一直在与这个斗争。我有一个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";
        }
}

1 个答案:

答案 0 :(得分: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;
}

(附言,我没有尝试编译它!)