2011-06-10 6 views
1

BLL 개체를 인스턴스화하기 전에 UI 단추를 클릭하면 DAL 개체를 인스턴스화해야합니다. 이것은 객체 자체 (의존성이 BLL 내부에서 인스턴스화 된 경우보다 더 많은 코드) 이전에 객체 의존성을 생성하는 것이 번거로울 것으로 보인다. 의존성 주입을 사용하기 위해 지불해야하는 가격입니까?의존성 주입 및 UI Orginization

BLL을 인스턴스화하는 데 필요한 준비가 UI에만 있습니다. 이것은 의존성 주입을하는 올바른 방법입니까? UI와 BLL 준비 논리를 깔끔하게 분리 할 수있는 방법이 있습니까?

class DAL{ 
    //Data access layer 
} 

class BLL{ 
    public BLL(DAL dal){ 
     this.dal = dal; 
    } 
    private DAL dal; 
} 

buttonRun_Click(object sender, EventArgs e){ 
    DAL dal = new DAL(); 
    BLL bll = new BAL(dal); 
    bll.DoStuff(); 
} 
+0

이것은 질문이 아닙니다 .... – BentOnCoding

+0

@Robotsushi, fixed – sooprise

+1

이것은 정말 DI입니까? dal과 bll은 모두 이벤트 처리기에서 로컬이므로 다른 종속성이 없으면 DoStuff()는 관찰 할 수있는 효과가 없습니다. – Andrei

답변

1

이 BLL 객체를 직접 작성해야하는 경우 팩토리 객체를 사용합니다. UI에 팩토리가 삽입 될 수도 있고, 거기에 주입을 사용하지 않으면 생성자에서 인스턴스화 될 수 있습니다.

팩토리 객체는 BLL의 인스턴스를 인스턴스화하고 정확하게 수행 된 방법을 알고 있어야합니다.

그러나 클릭 할 때마다 새 인터페이스가 필요하지 않은 경우 UI 자체에 BLL 인스턴스를 주입하지 않는 이유는 무엇입니까?

1

생성자 체인 (가난한 사람의 의존성 주입)

public Bll() : this (new Dal()) { } 

public Bll(IDal dal) // to provide other IDal implementations if needed 
{ 
    this.dal = dal; 
} 

공장 metods

은 는
private Bll() { } 

public static Bll Create() 
{ 
    IBll bll = new Bll(); 
    bll.Dal = new Dal(); 
    return bll; 
} 
는 는 이에 대한 IOC의 도구 (이를 위해 인터넷을 검색, 프레임 워크를 사용하여

의존성 주입이 풍부 어느 구성을 사용하여 기반 XML 인젝션 또는 언어 간 배선 ... - Castle Windsor, Spring.Net, Unity, StructureMap, Autofac, Ninject ...를 찾습니다. DAL, BLL 등을 분리하여 이미 좋은 코드를 개발하기 시작 했음에도 불구하고 일부 고급 디자인 패턴/응용 프로그램 아키텍처를 사용하는 것이 좋습니다 (예 : 일부 MVC 변형). 프레젠테이션 이벤트 처리기에서 개체를 인스턴스화하지 마십시오. .. 읽기 : GoF 디자인 패턴 및 응용 프로그램 아키텍처의 일반