2014-10-09 89 views
1

我得到了一個使用默認開發的web-api 2應用程序。它駐留在app.dll在單獨的DLL的Owin/Katana自託管場景的Web api代碼

現在我嘗試添加一個新的控制檯應用程序項目,它將使用Katana自主託管此應用程序。我添加了app.dll作爲參考。 問題是,當我運行這個自我託管的應用程序,並嘗試發送一個簡單的獲取請求的API,它沒有找到任何控制器。我得到以下錯誤信息:No type was found that matches the controller named 'MyController'.

現在,我試圖強制控制器被發現使用this way。但顯然,我做錯了什麼,因爲GetAssemblies()中的代碼永遠不會被調用。

代碼樣品低於:

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 
     config.Services.Replace(typeof (IAssembliesResolver), new AssembliesResolver()); 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     );app 
     appBuilder.UseWebApi(config); 
    } 
} 

public class AssembliesResolver : DefaultAssembliesResolver 
{ 
    public override ICollection<Assembly> GetAssemblies() 
    { 
     ICollection<Assembly> baseAssemblies = base.GetAssemblies(); 
     List<Assembly> assemblies = new List<Assembly>(baseAssemblies); 
     var controllersAssembly = Assembly.LoadFrom(@"app.dll"); 
     baseAssemblies.Add(controllersAssembly); 
     return assemblies; 
    } 
} 

回答

3

嘗試與ApiControllers實際項目創建一個新的AssemblyResolver類。然後用它來獲得組件。

public override ICollection<Assembly> GetAssemblies() 
    { 
     return new List<Assembly> 
     { 
      typeof (AssembliesResolver).Assembly 
     }; 
    } 

這只是假設你只有該單個DLL中的ApiControllers。