私は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) ノード node= new Nodes(); // この依存関係を削除するにはどうすればよいですか? 【コードをご覧ください】
3)依存性逆転の原則とwcfは良いアプローチですか?
ありがとう。
「Castle Windsor」という名前の Dependency Injection Container を使用して、Dependency Inversion Principle を実装することができました。しかし、私の場合、 Nodes クラスのオブジェクトを作成することは「依存関係」とは呼ばれていないようです。
List<Nodes> nodeList = new List<Nodes>();
私はこのように読みました。
「データのみのオブジェクトは、必要な機能を実行しないため、通常、「依存関係」とは呼ばれません。」何かご意見は?
ありがとう。