首页 > 解决方案 > 具有依赖注入的静态工厂方法(.net 核心)

问题描述

我的课程结构如下:

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>();

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

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

有没有更好的方法来构建代码?

标签: .net.net-core

解决方案


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

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

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

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

推荐阅读