我的课程结构如下:
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>();
但是在这种情况下,如何调用特定的工厂方法?
最好创建一个工厂类来处理对象实例化?
有没有更好的方法来组织代码?
答案 0 :(得分:1)
您可以通过在函数中使用lambda来调用工厂方法:
services.AddSingleton<IFooService>(_ => factoryMethod.Create());
如果工厂需要,则可以实例化其他对象(sp
是IServiceProvider
):
services.AddSingleton<IFooService(sp =>
{
var otherService = sp.GetRequiredService<IDependency>();
return factoryMethod.Create(otherService);
});