我有一個WCF服務,我試圖在那裏使用依賴倒置原則。我有一些疑問和下面的列表。之前依賴原理和依賴原理如下之後 代碼..WCF中的依賴倒置原則
代碼之前依賴的原則: -
INodeAppService.cs
namespace MyAppService
{
public class Nodes
{
[DataMember]
public int NodeID { get; set; }
[DataMember]
public string Item { get; set; }
}
[ServiceContract]
public interface INodeAppService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
List<Nodes> GetNodes(); //changed
}
}
NodeAppService.svc.cs
namespace MyAppService
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class NodeAppService: INodeAppService
{
public List<Nodes> GetNodes()
{
List<Nodes> nodeList = new List<Nodes>(); //changed
SqlCommand sqlCommand = new SqlCommand("myquery", conn);
SqlDataAdapter da = new SqlDataAdapter(sqlCommand);
DataTable dt = new DataTable();
try
{
da.Fill(dt);
foreach (DataRow row in dt.Rows)
{
Nodes node= new Nodes();
node.NodeID = Convert.ToInt32(row["NodeID"]);
node.Item = row["Item"].ToString();
nodeList.Add(node); //changed
}
return nodeList;
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
代碼之後的依賴的原則: -
INodeAppService.cs
namespace MyAppService
{
public class Nodes
{
[DataMember]
public int NodeID { get; set; }
[DataMember]
public string Item { get; set; }
}
[ServiceContract]
public interface INodeAppService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
IList<Nodes> GetNodes(); // List changed to IList
}
}
NodeAppService.svc.cs
namespace MyAppService
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class NodeAppService: INodeAppService
{
private IList<Nodes> _nodeList;
public NodeAppService(IList<Nodes> nodeList)
{
_nodeList= nodeList;
}
public IList<Nodes> GetNodes()
{
SqlCommand sqlCommand = new SqlCommand("myquery", conn);
SqlDataAdapter da = new SqlDataAdapter(sqlCommand);
DataTable dt = new DataTable();
try
{
da.Fill(dt);
foreach (DataRow row in dt.Rows)
{
Nodes node= new Nodes(); // How can I remove this dependency?
node.NodeID = Convert.ToInt32(row["NodeID"]);
node.Item = row["Item"].ToString();
_nodeList.Add(node);
}
return _nodeList;
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
1)但我收到錯誤「提供的服務類型無法作爲服務加載,因爲它沒有默認(無參數)構造函數。要解決此問題,添加一個默認的構造函數的類型,或者通過類型主機」的一個實例。
但是,讓默認的參數將不解決我的問題,請給出一個解決方案來解決這個問題。
2)節點的節點=新節點(); //我怎樣才能刪除此依賴[請查看代碼]
3)依賴倒置原則和WCF是不錯的辦法
感謝
?。我能夠使用名爲「Castle Windsor」的依賴注入容器來實現依賴倒置原則。但似乎在我的情況下創建節點類的對象不被稱爲「依賴」。
List<Nodes> nodeList = new List<Nodes>();
我已經閱讀過這樣的內容。
「僅數據對象通常不被稱爲」依賴「,因爲它們不執行某些所需的功能。」有什麼想法嗎?
謝謝。
什麼依賴注入容器是否在使用? –
你是什麼意思的「依賴注入容器」。無論如何,我通過構造函數添加依賴注入.. – Dev
我不知道任何「依賴注入容器」。現在我試着與「溫莎城堡」一起工作。謝謝您的幫助。 http://www.prideparrot.com/blog/archive/2012/2/dependency_injection_in_wcf_using_castle_windsor – Dev