【发布时间】:2018-06-26 17:25:04
【问题描述】:
我是一名初级程序员,但遇到了一些类设计问题。我想在游戏类中使用Load() 方法,该方法非常通用且具有依赖注入的多态性。示例如下:
假设我有一门课:
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 依赖注入框架,因为我在整个系统中将文件名绑定到 FileLoader 在逻辑上是错误的。
我虽然在使用工厂,但这并没有满足我的灵魂:)
你对设计有什么想法吗?应该怎么做?
工厂示例:
public class MyGameFactory {
public ISolver _solver;
public MyGameFactory(ISolver solver){
_solver = solver;
}
public MyGame MakeGame(ILoader loader) {
return new MyGame(loader, _solver);
}
}
附:我正在用 C# 编码。
【问题讨论】:
-
我会避免在构造函数中使用像文本文件这样的参数。如果您在某些时候需要具体文件,请将其作为参数传递给需要它的方法。
-
你能指出我应该把它(文件名)放在哪里吗?
标签: c# class dependency-injection unity-container class-design