![](/img/trans.png)
[英]When trying to use dependency injection and the IDisposable interface correctly should I inject an instance of SafeHandle? C#
[英]Dependency injection - Should I inject “utility classes”
我正在查看現有代碼,並且有一個“ 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}
}
我認為注入Utility類/處理程序或Model類中的任何東西完全是錯誤的,原因有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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.