C# фабричный шаблон с внедрением зависимости - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть некоторые данные, которые мне нужно загрузить асинхронно в моем классе. Поскольку у меня не может быть конструктора async, я попытался реализовать шаблон фабрики следующим образом:

public class MyClass
{
  private string someData;
  private readonly IMyDependency md;

  public MyClass(IMyDependency md) 
  { 
    this.md = md;
  }

  public async Task<MyClass> MyClassFactory()
  {
    string data = await LoadData();
    return new MyClass(data);
  }

  private MyClass(string data) { someData = data; }

  private async Task<string> LoadData() 
  { 
    await md.GetSomeData(); 
  }
}

Я понимаю, что формально шаблон фабрики предполагает, что мой MyClassFactory() равен static и что Я называю это явно для создания MyClass объектов.

Мои проблемы с этим заключаются в следующем:

Во-первых, MyClass является зависимостью для других модулей, и я использую ASP. NET DI ядра, чтобы внедрить его, где это необходимо , Это означает, что я никогда не создаю явно объекты этого класса, это делает инфраструктура DI.

Во-вторых, у меня есть MyDependency, который мне нужно вставить в MyClass, и я использую его в LoadData () метод, который предотвращает LoadData(), и, следовательно, MyClassFactory() будет static.

...