2013-07-16 2 views
0

DI 프레임 워크로 Ninject를 사용중인 MVC4 프로젝트가 있습니다. 내가 겪고있는 문제는 필자의 주요 웹 프로젝트가 다른 모든 프로젝트를 참조하는 것을 원하지 않으므로 내 구현에서 DI 바인딩을 분리하려고 시도하는 것입니다. 그때 나는 내 웹 프로젝트에서 동적으로 DLL을로드참조되지 않은 dll MVC Ninject로드

public class WebModuleBindings : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IStaticDataRepository>().To<StaticDataRepository>(); 
    } 
} 

: 내가 실행할 때이 잘 작동

kernel.Load(bindingDll); 

나는 Ninject에 모듈을 포함하는 별도의 프로젝트라는 바인딩을 만들려고했다 로컬로하지만 msbuild를 사용하고 내 응용 프로그램을 배포 할 때 바인딩 프로젝트 dll은 아무데도 참조되지 않으므로 포함되지 않습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

프로젝트 참조로 추가하고 '로컬 복사'를 'true'로 설정하지 않는 이유는 무엇입니까? 어느 쪽이든 어셈블리가 올바른 폴더에 배포되지 않기 때문에 의심의 여지가 없습니다. 배포 프로세스에서이를 고려해야합니다. –

+0

bindings 프로젝트에 대한 참조를 추가하면 웹 프로젝트는 모든 프로젝트를 간접적으로 참조하므로 순환 참조로 인해 다른 프로젝트가 내 웹 프로젝트를 참조 할 수 없다는 것을 의미합니다. 평소입니까? – TJF

답변

1

귀하의 웹 프로젝트는 호스트 프로젝트입니다. 호스트 프로젝트로서 모든 dll이 제공되는지 확인하는 것은 웹 프로젝트의 책임입니다. 배포가 더 쉬워 짐

+0

bindings 프로젝트에 대한 참조를 추가하면 웹 프로젝트는 모든 프로젝트를 간접적으로 참조하므로 순환 참조로 인해 다른 프로젝트가 내 웹 프로젝트를 참조 할 수 없다는 것을 의미합니다. 평소입니까? – TJF

+0

웹 프로젝트는 출발점이기 때문에 웹 프로젝트는 다른 방식으로 다른 프로젝트를 참조해야합니다. 후자의 경우에만 웹 프로젝트, 이벤트를 참조해야합니다.이 경우 코드를 리팩토링 할 수 있습니다 (별도 어셈블리에서 이동하여). 웹 프로젝트에 대한 참조가 없습니다. –

+0

감사합니다. – TJF

2

부트 스트 래퍼이있을 때 순환 종속성이 없습니다. 종속성 흐름은 다음과 같습니다.

Web Project 
    | 
    |_______________- Bootstrapper project. All of your Ninject Bindings, etc. 
    |     The Kernel is also created here and passed back to the 
    |     Web project. 
    |         | 
    |         | 
    ▼         | 
Business Layer -------------------------- 
    |         | 
    |         | 
    |         | 
    ▼         | 
Data Access Layer ----------------------- 

         Possibly a dangling Entities/POCO project here 

기본적으로 부트 스트 래퍼는 구성 루트입니다. 모든 다른 단일 어셈블리를 참조 할 수 있으므로 바인딩 등에 필요한 모든 인터페이스/구체적인 구현에 액세스 할 수 있습니다. 그런 다음 웹 프로젝트는 부트 스트 래퍼와 다음 레이어를 모두 참조합니다. 이것은 의존성을 흘려 보내고 코드를 구조화하는데 도움을 줄 수 있습니다.

관련 문제