如果DLayer
僅用於GetBLObject
方法,我會在方法調用中注入一個工廠。喜歡的東西:(上@PaulPhillips例如大廈)
public GetBLObject(string params, IDataLayerFactory dataLayerFactory)
{
using(DLayer dl = dataLayerFactory.Create()) // replace the "new"
{
//BL logic here....
}
}
但是似乎有什麼你真的想在業務層一起工作是一個DataSet
。因此,另一種方法是讓GetBLObject
將方法調用中的DataSet
替換爲string param
。爲了使這項工作,你可以創建一個類,從DLayer
只處理DataSet
。例如:
public class CallingBusinesslayerCode
{
public void CallingBusinessLayer()
{
// It doesn't show from your code what is returned
// so here I assume that it is void.
new BLLayer().GetBLObject(new BreakingDLayerDependency().GetData("param"));
}
}
public class BreakingDLayerDependency
{
public DataSet GetData(string param)
{
using (DLayer dl = new DLayer()) //you can of course still do ctor injection here in stead of the new DLayer()
{
return dl.GetData(param);
}
}
}
public class BLLayer
{
public void GetBLObject(DataSet ds)
{
// Business Logic using ds here.
}
}
一個警告:懲戒出DataSet
(你必須在這一點,保羅·菲利普斯解決兩者)可真麻煩,所以測試這將是可能的,但不一定有很多樂趣。
你究竟是什麼意思「依賴注入實現,所以構造函數注入是不可能的。」?你的意思是你不能在你的類中使用構造函數,或者你沒有一個DI容器/框架? – steenhulthin
@steenhulthin我們沒有在項目中啓動和運行DI框架。 – NullReference
稍後在代碼中如何使用dl(dl.GetData(params)調用是否僅將數據檢索到dl對象中)。 – steenhulthin