LINQ to SQL 클래스 (DataContext)을 사용하여 DB에 연결합니다. 동일한 스키마를 가진 데이터베이스가 세 개 있는데, Development
, Staging
및 Live
입니다. 나는 그들이 동일한 스키마를 가지고 있다면 DataContext 생성자에 전달하는 연결 문자열 만 변경함으로써 동일한 DataContext를 사용하여 연결할 수 있다는 것을 깨달았습니다. LINQ to SQL DataContext 생성자 숨기기
public interface IDataContextCreator
{
MyDataContext CreateDataContext();
}
지금 나는
Development
,
Staging
또는
Live
DB를 연결하려면이 인터페이스의 concerete 구현을 가질 수 있습니다 DataContext를 생성에 대한 모든 호출이 통과하도록 나는 인터페이스를 선언했다.
는 지금처럼에 은 위의 인터페이스를 통해 이동 의 DataContext의 창조에 대한 모든 호출을 강제로 내 DataContext의 생성자을 숨길 것이다. DataContext의 액세스 가능성을 internal
으로 변경하면 솔루션의 다른 프로젝트에서 사용할 수 없습니다. 클래스 접근성 수정자를 public
으로 유지하지만 생성자를 internal
으로 변경하는 것이 이상적입니다. 자동 생성 클래스에서이를 수행 할 수있는 방법이 있습니까? 이 문제에 대한 다른 해결책이 있습니까?
감사합니다.
편집 : 존 생성자는 internal
이어야합니다. 내 데이터 레이어에 이것들이 있고 다른 프로젝트/레이어의 클래스가이 생성자에 접근하는 것을 원하지 않습니다. 그러나 이들은 인터페이스를 사용하여 DataContext 만 만들고 생성 된 DataContext 만 사용할 수 있어야합니다. 클래스 수준에서 public이 될 것이기 때문입니다.
왜 내부 *가 아닌 * 보호 *로 생성자를 변경 하시겠습니까? –
가능한 복제본 http://stackoverflow.com/questions/3671331/make-sure-object-only-created-by-factory-c –
@WiktorZychla - 저는 여기가 중복되어 있다고 생각하지 않습니다. ** DataContext **의 자동 생성. 이것들을 직접 편집해야한다면 ** DataContext ** 클래스를 public (즉 모든 사람이 사용할 수 있음) _으로 유지하면서 생성자를 내부적으로 유지하면됩니다. –