나는 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) 하지만 오류가 발생했습니다 "기본 제공된 (매개 변수가없는) 생성자가 없기 때문에 제공된 서비스 유형을 서비스로로드 할 수 없습니다. 문제를 해결하려면 형식에 기본 생성자를 추가하거나 유형 인스턴스를 호스트에 전달하십시오. "
기본 매개 변수를 지정해도 내 문제가 해결되지 않을 수 있습니다. 문제를 해결할 수있는 해결책을 제공하십시오 ..
// 어떻게이 종속성을 제거 할 수 있습니다3) 의존 관계 역전 원칙과 WCF 좋은 방법입니다
감사
[코드 참조하시기 바랍니다];?.을2) 노드 = 새로운 노드를() 노드
"Castle Windsor"라는 종속성 주입 컨테이너를 사용하여 Dependency Inversion Principle을 구현할 수있었습니다. 하지만 내 경우에는 노드 클래스의 개체를 만드는 것처럼 보이지 않는 "종속성".
List<Nodes> nodeList = new List<Nodes>();
나는 이렇게 읽었다.
"데이터 전용 개체는 필요한 기능을 수행하지 않으므로 일반적으로"종속성 "이라고는하지 않습니다." 이견있는 사람?
감사합니다.
무엇 의존성 주입 컨테이너를 사용하고 있습니까? –
"Dependency Injection container"는 무엇을 의미합니까? 어쨌든 나는 생성자를 통해 의존성 주입을 추가하고있다. – Dev
나는 "Dependency Injection container"를 전혀 알지 못했다. 이제는 "캐슬 윈저 (Castle Windsor)"로 시도해 보았습니다. 도와 주셔서 감사합니다. http://www.prideparrot.com/blog/archive/2012/2/dependency_injection_in_wcf_using_castle_windsor – Dev