Интерфейсы c #, инверсия зависимостей и общие типы - PullRequest
0 голосов
/ 18 октября 2018

Я боролся с этим некоторое время.У меня есть 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 голосов
/ 18 октября 2018

Соответствует ли это требованиям:

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;
}

(ps я не пробовал это компилировать!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...