具有依赖项注入的静态工厂方法(.net核心)

时间:2020-10-13 08:30:47

标签: .net .net-core

我的课程结构如下:

public interface IFooService {
  void DoStuff1();
  void DoStuff2();
}

public class FooService: IFooService {
  private string _data;

  public static FooService CreateDefault() {
    var ret = new FooService {
      _data = "Default Data"
    };

    return ret;
  }


  public static FooService CreateFromFile(string path) {
    string data = File.ReadAllText(path);

    var ret = new FooService {
      _data = data
    };

    return ret;
  }

  public static FooService CreateFromValue(string data) {
    var ret = new FooService {
      _data = data
    };

    return ret;
  }

  public void DoStuff1() {
    //
  }

  public void DoStuff2() {
    //
  }
}

通常,我将在ConfigureServices中执行以下操作:

services.AddSingleton<IFooService, FooService>();

但是在这种情况下,如何调用特定的工厂方法?

最好创建一个工厂类来处理对象实例化?

有没有更好的方法来组织代码?

1 个答案:

答案 0 :(得分:1)

您可以通过在函数中使用lambda来调用工厂方法:

services.AddSingleton<IFooService>(_ => factoryMethod.Create());

如果工厂需要,则可以实例化其他对象(spIServiceProvider):

services.AddSingleton<IFooService(sp => 
{
    var otherService = sp.GetRequiredService<IDependency>();
    return factoryMethod.Create(otherService);
});