6

제가 작업하고있는 프로젝트의 Ninject에서 샷을 주었을 때 저는 매우 최근에 벽돌 벽을 때렸습니다.정적 의존성 주입 공장, 맞나요?

나는 모든 종류의 질문을 통해, 체계적으로 의존성 주입을 위해 내 디자인과 아키텍처를 요청했습니다.

  1. Is this right to inject the container/kernel to the main application presenter?

  2. How to configure Ninject to use along with NHibernate in WinForms?

  3. Conditional dependency injection binding only when property not null

  4. 시간 후
  5. What did I get wrong, DI or Design, and how should I go about it?

및 시간, 바다의 시간 나는 그의 정적 DIFactory 클래스에 대해 이야기하는 Justin Etheredge의 기사를 보았습니다.

지금 궁금

, 그것은 정적 DI 공장을 사용하는 일이 마법처럼 작동하게되지 않는 이유는 무엇입니까?

실용적인 응용 프로그램에서 정적 DI 공장을 사용하는 것에 대한 찬반론을 듣고 싶습니다.

또한 IoC와 DI가 동일하거나 일부 차이가 있지만 매우 비슷합니까?

답변

7
static DI Factory is a Service Locator

Service Locator is an anti-pattern 코드에 대해 그 이유로는 어렵게 만들 것이기 ​​때문에 :

서비스 로케이터의 유일한 장점은 약간easier to understand than Dependency Injection 점이다. 그러나 DI는 파악하기가 어렵지 않다. once you get over a few conceptual hurdles.

IoC와 DI의 관계는 DI is a special case of IoC입니다.

+0

올바르게 인스턴스화하기 위해 사용자 자격 증명이 필요하기 때문에 특정 유형을 응용 프로그램 시작시 인스턴스화 할 수없는 경우 어떻게해야합니까? 예를 들어,'NHibernante.ISessionFactory'는 적절한 연결 문자열 없이는 인스턴스화 될 수없고 일단 생성되면 연결 문자열을 변경할 수 없게되는 등의 문제입니다. 이 문제를 해결하기 위해'IDbConnection'을 제공 할 수 있으며'ISession' 수명주기 동안 객체의 흔적을 보관하는 두 번째 레벨 캐시를 잃어 버릴 수 있습니다. 그러면 사용자는 자신의 자격 증명을 제공해야하며, 이제는 'ISessionFactory'종속성이 더 이상 문제가되지 않습니다. –

+0

새로운 타입을 등록 할 수있는 것은'AbstractFactory'일까요? 어떻게 생각하세요? –

+1

런타임에 하위 그래프를 확인할 수없는 경우에는 항상 다른 간접 계층을 추가 할 수 있습니다. 추상 공장이 하나의 옵션이 될 것입니다. [Abstract Factory 구현] (http://blog.ploeh.dk/2012/03/15/AbstractFactory 구현)에 대한 자세한 정보는 다음과 같습니다. –