내가 인터페이스가 있습니다사용할 인터페이스 구현을 전역으로 설정할 수 있습니까?
public interface IHHSDBUtils
{
void SetupDB();
bool TableExists(string tableName);
. . .
을 ... 그 여러 구현이 있습니다
public class SQLiteHHSDBUtils : IHHSDBUtils
public class SQCEHHSDBUtils : IHHSDBUtils
public class FlatfileHHSDBUtils : IHHSDBUtils
public class TestHHSDBUtils : IHHSDBUtils
I는, 세계적으로 접근 지점에서 사용하려고하는 구현 지정할 수 있도록하려면 로 : 다음
public static class HHSConsts
{
public static IHHSDBUtils hhsdbutil = SQLiteHHSDBUtils;
... 그래서 앱 어디에서든처럼 전화 :
를private HHSDBUtils hhsdbutils { get; set; }
. . .
hhsdbutils = new HHSConsts.hhsdbutil;
hhsdbutils.SetupDB();
이것이 가능합니까? "SQLiteHHSDBUtils '는'형식 '이지만 위의 hhsdbutil에 대한 할당과 함께'변수 '처럼 사용됩니다.
당신이 의존성 주입을 사용한 경우 (당신이하지 왜?) 당신이 말할 수있는 디 컨테이너입니다. 현재 쓰여지고있는 방식으로 그냥 새로 만들 수 있습니다 public static IHHSDBUtils hhsdbutil = new SQLiteHHSDBUtils(); – reggaeguitar
예를 들어 설정 파일을 기반으로 정확한 인스턴스를 해결하는 서비스 로케이터를 사용할 수 있습니다 (단,이 또한 안티 패턴으로 보여짐). 그렇지 않으면 IoC 컨테이너를 조사하여 해결할 인스턴스를 구성 할 수 있습니다. – Styxxy
@reggaeguitar : DI는 내게 마치 일종의 괴물 같다. 사다리꼴 못을 둥근 구경 안으로 밀어 넣는 것을 생각 나게합니다. 이해하기 어렵고 유지하기가 쉽습니다. 제대로 작동하려면 타사 "컨테이너"가 필요합니다. 저에게 그것은 Cyrano de Bergerac의 코를 Frankenstein 박사의 괴물에 붙이는 것과 같이 약간 부자연 스럽습니다. IOW : 저는 DI를 피하려고합니다. –