2016-06-28 4 views
2

C# Owin WebApi 자체 호스트 프로젝트가 있으며 사용하는 컨트롤러가 별도의 어셈블리로 구현됩니다. 웹 응용 프로그램을 시작하고 AppDomain으로로드하기 전에 명명 규칙을 사용하여 이러한 어셈블리를 찾습니다. Api가 시작되면 컨트롤러에 액세스 할 수 있습니다. 이것은 또한 작동 Config.ServicesWebApi 런타임 중에로드 된 어셈블리 새로 고침

config.Services.Replace(typeof(IAssembliesResolver), new MyAssembliesResolver()); 

의 기본을 대체하는 사용자 정의 IAssemblyResolver - 클래스와 관련이 또 다른 방법이있다, 내 모든 별도의 컨트롤러 어셈블리를로드 및 접근 발견된다.

문제점 : 새로운 컨트롤러 어셈블리가 실행 디렉토리에 나타납니다. My Api에는 실행중인 디렉토리에서 새 어셈블리를 찾고 런타임 중에 을로드하라는 "AssembliesController"가 있습니다. 이것은 또한 작동하지만 문제는 다음과 같습니다. 새로로드 된 어셈블리의 컨트롤러는 API를 다시 시작할 때까지 액세스 할 수 없습니다.

Api는 시작시 어셈블리 (IAssembliesResolver) 및 사용 가능한 컨트롤러 유형 (IHttpControllerTypeResolver)을 한 번만 묻고 끝날 때까지 결과와 함께 작동합니다. 하지만 필자의 경우, Api를 다시 시작하지 않고도 런타임 중에 어셈블리/컨트롤러를 추가하려고합니다. 누군가 제발 나를 도와 줄 수 있니? Api에서 어셈블리/컨트롤러를 새로 고치는 방법은 무엇입니까?

+1

[this] (http://stackoverflow.com/questions/13580243/asp-net-webapi-how-to-load-additional-controllers-at-runtime)이 도움이 될 수 있습니다. 누군가 생각하기에 전에 물었지만 어떤 대답도 표시하지 않았습니다. – meJustAndrew

답변

0

DefaultHttpControllerSelector를 덮어 써야합니다. 다음은 주제에 관한 매우 유용한 기사입니다. link Enjoy!