2012-11-09 3 views
1

동일한 실행 파일 (플러그인)에 대해 서로 다른 DAL을 사용하기 위해 ninject xml 확장을 사용하고 있습니다. 내 생각은 ninject xml 파일을 사용하여 주 응용 프로그램의 하위 폴더에 모든 DLL (DLL)을 저장하는 것이 었습니다.Ninject XML Extension - Plugin architecture

문제는 ninject가 xml에서 참조 된 바인딩을 찾을 수 없다는 것입니다. 그것은 내가 주 응용 프로그램 (.exe)의 동일한 폴더에 dll을 복사하는 경우에만 작동합니다.

나는 커널에게

Assembly assembly = Assembly.LoadFrom(dll); 
AppDomain.CurrentDomain.Load(assembly.GetName()); 
Kernel.Load(xmlFile); 

하지만 여전히 나던 작업을로드하기 전에 DLL을로드했습니다. (오류 : "을 couldnt 해결 형 '합니다 MyType'속성 '에'에 정의 된") 사람이 다른 폴더에서 Ninject에-XML 파일 또는로드 유형에 콘크리트 폴더를 참조 할 수있는 방법을 알고 있나요

그 수 ninject-xml 확장자를 사용하여 해결할 수 있습니까?

답변

0

이 문제는 구성 파일에서 "probing"요소를 사용하여 해결됩니다. 해상도 범위에 폴더가 포함됩니다.

<runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="Plugins"/> 
     </assemblyBinding> 
</runtime> 

자세한 정보 here.

감사합니다.

0

협약 확장은 아마도 어떤 DLL이 존재하는지에 따라 바인딩을로드함으로써 문제를 해결할 수 있습니까? 그렇지 않다면 문제를 좀 더 자세히 설명해 주시겠습니까?

+0

Ninject는 하위 폴더 (./Plugins/MyType.dll)에있는 dll에서 선언 할 때 유형을 해석 할 수없는 것 같습니다. dll을 메인 폴더에 놓았을 때 잘 동작합니다. 두 경우 모두 dll은 주 프로젝트에서 참조되지 않으며 동적으로로드하는 것이 좋습니다. – Morvader

+2

사용자 지정 폴더는 .NET 어셈블리 해상도 조회의 일부가 아닙니다. http://stackoverflow.com/questions/4145728/what -is-the-net-folder-search-hierarchy - 또한 실제 오류가 무엇인지 아직 말하지 않았습니다. "여전히 작동하지 않는다"고 말하면 우리가 겪었던 오류에 대해 알려주지 않습니다. 아마도 xml을 사용하여로드 할 라이브러리를 지정하고 컨벤션 확장 프로그램을 사용하여 어셈블리에서 선택하고 바인딩을 만드는 경우 문제를 해결할 수있는 방법이있을 수 있습니다. –

+0

문제는 ninject가 xml에 지정된 바인딩을 해결할 수 없다는 것입니다 : "Couldnt resolver type MyType이 'to'속성"에 정의되었습니다. 어쨌든, 해상도에 대한 링크를 찾아 주셔서 고맙습니다. 문제에 대한 "probing"요소를 설정에 추가했습니다. 답으로 쓰고 싶으면 받아 들일 것입니다. 감사!. – Morvader