依赖注入——我应该注入“实用程序类”吗?

本文关键字:注入 实用程序类 实用程序 我应该 依赖 | 更新日期: 2023-09-27 18:01:48

我正在审查一个现有的代码,并且有一个"bean"类:

[Serializable]
public class MyData {
 string S {get;set;}
 int I {get;set;}
 //bla bla bla
 private IStringConverter sc;
 public MyData(IStringConverter sc){this.sc=sc}
}

我认为在Model类中注入Utility类/处理程序或其他任何东西是完全错误的,原因有2:1)这防止序列化2)为什么?模型类不应该有行为。

你同意吗?(我应该改变这样写的类吗?)

依赖注入——我应该注入“实用程序类”吗?

您可以创建一个在DTO实例上操作的新服务,并注入它的依赖项。这样你就能把DTO的行为弄清楚,一切又干净了。良好的架构契合度

将服务注入DTO可能不是最好的主意:)

我会考虑使用一个以服务作为参数的扩展方法。

通过这种方式,"行为"从DTO中分离出来,序列化就不是问题了。

扩展方法可能是一种方法,但我认为这有点像使您的逻辑成为编译时的单例,如果它永远不会改变就很好。

所以我会尝试这样做,因为从字面上看,一切都是基于契约的,是可注入的

public class Poco
{
    public int Foo;
    public int Bar;
}
public class PocoUtility : IPocoUtility
{
    private IService _service; 
    public PocoUtility(IService service)
    {   
        _service = service;
    }
    public Result DoSomethingWithPoco(Poco poco)
    {
        return _service.Convert(poco);
    }
}
public class SomethingThatUsesAPoco
{
    private IPocoUtility _logicForSomething;
    public SomethingThatUsesAPoco(IPocoFactory pocoFactory,  IPocoUtility logicForSomething)
    {
        _poco = pocoFactory.CreateInstance();  
    }
    public Result DoIt()
    {
        return _logicForSomething.DoSomethingWithPoco(_poco);
    }
}