如果您退房the Autofac multitenant documentation on the wiki您會注意到您確定租戶的方式是實施ITenantIdentificationStrategy
。在該wiki頁面上給出了一個示例,其中顯示瞭如何從請求中的參數獲取租戶,如查詢字符串。
很容易修改示例以查看請求的其他部分 - 主機名,域名或其他任何內容。
using System;
using System.Web;
using AutofacContrib.Multitenant;
namespace DemoNamespace
{
public class DomainStrategy : ITenantIdentificationStrategy
{
public bool TryIdentifyTenant(out object tenantId)
{
tenantId = null;
try
{
var context = HttpContext.Current;
if(context != null && context.Request != null)
{
var site = context.Request.Url.Authority;
// Here's where you map the site to the tenant ID:
tenantId = MapTheSiteToTheTenantId(site);
}
}
catch(HttpException)
{
// Happens at app startup in IIS 7.0
}
return tenantId != null;
}
}
}
顯然你需要按摩它才能爲你工作。你是如何做映射的,無論你是否返回null作爲默認租戶ID等等。
請注意,如果您基於HTTP請求值進行測試,則任何時候解析依賴關係並且沒有網絡上下文中,您將獲得應用程序級依賴性,而不是租戶特定的依賴性......因爲您無法識別租戶。您會在catch塊中看到一個很小的工件 - 如果在應用程序啓動時任何依賴項得到解決,則不一定有Web上下文,因此在調用HttpContext.Current時,IIS 7.0會拋出HttpException。你必須測試這樣的東西。
此外,如果服務電話或服務電話昂貴,您將需要考慮租戶ID映射的緩存策略。每次解決多租戶依賴時,策略都會被調用,因此您希望儘可能高效地實施策略。
I would really recommend checking out that documentation.這很長,但這是因爲多租戶是一個複雜的話題,並且有很多理由可以覆蓋。如果你潛入那裏,你會發現這樣的問題的答案。
此底層CRUD應用程序是否是從不同網站的代碼中調用的單個運行實例?如果是這樣,它的架構是什麼? –
@MarcL。我在想IIS 7.0,Win 2008 R2。是的,單個實例將被網站1或2或3調用。因此,在網站1上,將會有一個鏈接到codebase.website1.com等等。每個用戶都將被認證,但是,基於該網站,所以來自網站2的用戶2無法登錄到codebase.website1.com。我希望這是有道理的。 – REMESQ