.net - 具有依赖注入的静态工厂方法(.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>();
但是在这种情况下,如何调用特定的工厂方法呢?
最好创建一个工厂类来处理对象实例化?
有没有更好的方法来构建代码?
解决方案
您可以通过在函数中使用 lambda 来调用工厂方法:
services.AddSingleton<IFooService>(_ => factoryMethod.Create());
如果您的工厂需要它(sp
是IServiceProvider
),您可以实例化其他对象:
services.AddSingleton<IFooService(sp =>
{
var otherService = sp.GetRequiredService<IDependency>();
return factoryMethod.Create(otherService);
});
推荐阅读
- excel - 计划运行在程序中具有 excel 的 .exe 文件
- vue.js - 我想推送实时数据和绘图
- c# - 为什么无法转换此双精度值
- javascript - 通过ajax将数据从javascript传递到php,动态选择一个myslq表并在javascript中检索查询的数据
- ios - 如何使 UIBarButtonItem 文本在 UIPickerView 中可见?
- angular - 发生对话框弹出时滚动条溢出
- typescript - 无法将“socket.io-client”作为打字稿中的模块导入
- android - SpannableStringBuilder 在某些设备中不起作用
- tcp - Istio tcp 流量镜像
- java - 如何在 JavaFX 中向手风琴添加监听器