gpt4 book ai didi

c# - 类设计、多态加载方式、依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 12:20:34 25 4
gpt4 key购买 nike

我是一名初级程序员,我遇到了一些类设计问题。我想在游戏类中使用 Load() 方法,该方法具有依赖注入(inject)的通用性和多态性。示例如下:

假设我有一个类:

public class MyGame {
public IGameData _data;
public ISolver _solver;
public ILoader _loader;


public MyGame(ILoader loader, ISolver solver) {
_loader = loader;
_solver = solver;
}

public Load() {
/*
The loader might need a param or not,
how can I make the method Dependency Injection friendly
*/
_data = _loader.Load();
}
}

问题是我想要 FileLoader()NetworkLoader() 等类。其中每一个都需要不同的参数。我得到的一种解决方案是在构建具体的 Loader 时传递参数:

var fileLoader = new FileLoader('somegamestate.txt');
var someSolver = new SomeSolver();
var game = new MyGame(fileLoader, someSolver);

但这样的设计似乎并不能很好地与 C# Unity 依赖注入(inject)框架一起工作,因为我认为将文件名绑定(bind)到整个系统中的 FileLoader 在逻辑上是错误的。

我虽然在使用工厂,但这并不能满足我的灵魂:)

您对设计以及应该如何完成有什么想法吗?

工厂示例:

public class MyGameFactory {
public ISolver _solver;
public MyGameFactory(ISolver solver){
_solver = solver;
}

public MyGame MakeGame(ILoader loader) {
return new MyGame(loader, _solver);
}
}

附言我正在用 C# 编写代码。

最佳答案

正在关注 this :

你可以使用

container.RegisterType<ILoader , FileLoader>(
new InjectionConstructor("somegamestate.txt") //Old way to pass value to constructor - not flexible.
);

container.Resolve<MyGame>(new DependencyOverride<ILoader >(new FileLoader("somegamestate.txt")));

关于c# - 类设计、多态加载方式、依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com