Self-Host 模式下,預設 DefaultAssembliesResolver 僅掃描已載入組件。若 Controller 定義於獨立組件(專案引用),需自訂 AssembliesResolver 載入外部組件。
方案包含 4 專案:Foo/Bar/Baz (Class Library, 含 Controller)、Hosting (Console, 參考前三者)。預設啟動無法解析外部組件 Controller。
IAssembliesResolver,GetAssemblies() 回傳 AppDomain.CurrentDomain.GetAssemblies() 合併手動載入的外部組件HttpSelfHostConfiguration 設定 Services.Replace(typeof(IAssembliesResolver), new CustomResolver())public class CustomAssembliesResolver : IAssembliesResolver {
public ICollection<Assembly> GetAssemblies() {
var assemblies = new List<Assembly>(AppDomain.CurrentDomain.GetAssemblies());
// 手動載入輸出目錄下的外部組件
var dir = AppDomain.CurrentDomain.BaseDirectory;
foreach (var file in Directory.GetFiles(dir, "*.dll")) {
try { assemblies.Add(Assembly.LoadFrom(file)); } catch { }
}
return assemblies;
}
}
此模式適用於模組化架構、外掛式 Controller 擴充場景。