通過《ASP.NET Web API的Controller是如何被創建的?》的介紹我們知道默認ASP.NET Web API在Self Host寄宿模式下用于解析程序集的AssembliesResolver是一個DefaultAssembliesResolver對象,它只會提供當前應用程序域已經加載的程序集。如果我們將HttpController定義在非寄宿程序所在的程序集中(實際上在采用Self Host寄宿模式下,我們基本上都會選擇在獨立的項目定義HttpController類型),即使我們將它們部屬在宿主程序運行的目錄中,宿主程序啟動的時候也不會主動去加載這些程序集。由于當前應用程序域中并不曾加載這些程序集,HttpController類型解析將會失敗,HttpController的激活自然就無法實現。[本文已經同步到《How ASP.NET Web API Works?》] 我們可以通過一個簡單的實例來證實這個問題。我們在一個解決方案中定義了如右圖所示的4個項目,其中Foo、Bar和Baz為類庫項目,相應的HttpController類型就定義在這3個項目之中。Hosting是一個作為宿主的控制臺程序,它具有對上述3個項目的引用。我們分別在項目Foo、Bar和Baz中定義了三個繼承自ApiController的HttpController類型FooController、BarController和BazController。如下面的代碼片斷所示,我們在這3個HttpController類型中定義了唯一的Action方法Get并讓它返回當前HttpController類型的AssemblyQualifiedName。
1: public class FooController : ApiController
2: { 3: public string Get()
4: { 5: return this.GetType().AssemblyQualifiedName;
6: }
7: }
8:
9: public class BarController : ApiController
10: { 11: public string Get()
12: { 13: return this.GetType().AssemblyQualifiedName;
14: }
15: }
16:<PRe style="border-top-style: none; overflow: visible; font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left:
新聞熱點
疑難解答