2014-10-15 3 views
1

내 다트 애플리케이션에서 MVP 패턴과 각도 다트 종속성 삽입 라이브러리 (각도 -di)를 사용하고 있습니다.Angular-Dart DI 라이브러리의 공장 주입

위의 예에서는 원형 의존성이므로 MyView 또는 MyPresenter를 삽입 할 수 없습니다.

class MyView { 
    MyPresenter presenter; 
    MyView(this.presenter); 
} 
class MyPresenter { 
    MyView view; 
    MyPresenter(this.view); 
} 

Guice이처럼 공장을 주입했다와 나는 보통 자바에서 이런 짓을하는 방법 :

class MyView { 
    MyPresenter presenter; 
    MyView(this.presenter); 
} 
class MyPresenter { 
    Factory<MyView> factoryView; 
    MyView view; 
    MyPresenter(this.factoryView) { 
     view = factoryView(this); 
    } 
} 

가 어떻게이 사용하는 각 디 달성합니까? 팩토리 자체를 작성하지 않고도 팩토리를 주입 할 수 있습니까?

답변

2

각도 2 다트

typedef MyView MyViewFactoryFn(MyPresenter p); 
provide(MyView, useValue: (MyPresenter p) => new MyView(p)); 

MyPresenter(MyViewFactoryFn vf) { 
    view = vf(this); 
} 

또는

typedef MyView MyViewFactoryFn(MyPresenter p); 

MyView viewFactory(MyPresenter p) => new MyView(p) 
const Provider(MyView, useFactory: viewFactory); 

MyPresenter(MyViewFactoryFn vf) { 
    view = vf(this); 
} 

도 참조

각도 1 다트

당신은 생성자는 다음

MyPresenter(MyViewFactoryFn vf) { 
    view = vf(this); 
} 
과 같아야 폐쇄

typedef MyView MyViewFactoryFn(MyPresenter p); 
bind(MyView, toValue: (MyPresenter p) => new MyView(p)); 

을 결합 할 수

toFactory:도 있지만 DI는 공장 자체를 호출 할 것입니다.하지만 클로저가 작동하는 toValue:이 맞을 것으로 생각됩니다.

+0

전통적인 @Component (지시문 = const [MyView])를 사용하는 방법이 있나요 ??? –

+0

물론 DI와 관련이 없지만 지시문과 구성 요소를 사용하여 뷰에서 사용할 수 있습니다. –