我正在尝试在课堂上实施DI,但我不确定我的设计是否合适。
类中的相关代码我想将DI添加到
class DoerValidation
{
public DoerValidation()
{
compileData();
}
private void compileData()
{
doersActive = Doer.GetActiveDoers();
//...
}
}
在我的Doer
班级
public partial class Doer
{
private static readonly DoerRepository repository = new DoerRepository();
public static IEnumerable<Doer> GetActiveDoers()
{
return repository.Doers.Where(c => c.Person.IsActive);
}
}
在这种情况下,我只是不知道如何实现DI。也许GetActiveDoers
方法设计不好?否则你会把这种方法放在哪里?
直接在存储库中添加新方法是一个好习惯吗?有些人告诉我它应该保持干净,所以它只实现了这个
public interface IDoerRepository
{
IQueryable<Doer> Doers { get; }
void SaveDoer(Doer doer);
void DeleteDoer(Doer doer);
}
答案 0 :(得分:2)
听起来你需要将DoerRepository
基本注入DoerValidation
- 将其传递给构造函数。
GetActiveDoers
和静态变量都违反了DI,IMO的原则。
答案 1 :(得分:1)
静态方法和属性本质上是程序性的。如果您静态公开GetActiveDoers()方法,则无法注入其功能 - 客户端只能忽略它或在任何需要的地方使用它。
如果您致力于DI和静态实现,则需要为该静态类编写实例包装器并注入实例包装器。