2

我正在構建一個多租戶MVC 4應用程序並使用Autofac作爲容器。Autofac:Custom LifetimeScope

我一直在看Autofac MultiTenant庫,但除非我錯過了一些東西,我不認爲它真的適合我需要的東西。這是我的情況:

  • 我不知道所有租戶的前面,而新會執行過程中創建
  • 租戶不具有不同的依存關係,只存儲實例
  • 我中的數據有一些情況下需要被每個租戶,以確保沒有數據的泄漏
  • 我有一些情況下,這將是在根容器(不是問題)
  • 我有一些情況下,這將是每單個實例http請求(no關閉TA的問題)
  • 我確定承租人基於他們訪問的網站與

我一直沒能找到任何符合我的需求,所以URL,我想我需要看的方式爲每個租戶創建我自己的生活範圍。我將如何去創造諸如此類的東西?

回答

3

[我以前回答,並表示你不能立即註冊新租戶。這是不正確的,我正在相應更新。

我認爲你可以用Autofac.Extras.Multitenant做你想做的,但是你會想要徹底地測試它(和let us know if it's broken)。

  • 住戶不具有不同的依存關係,只存儲實例中的數據:註冊在容器級別常見的依賴關係,但對於具有每個租戶不同的數據的情況下,註冊這些作爲InstancePerTenant
  • 我有一些實例需要爲每個租戶,以確保沒有數據泄漏:使用InstancePerTenant註冊擴展。
  • 我使用來確定一個基於他們訪問該網站的URL的租戶:實現您自己的ITenantIdentificationStrategy,該URL查看URL並轉換爲租戶ID。

新租戶需要執行項目期間註冊是我以前的想法是行不通的,但現在我想會的。

當你創建在應用程序啓動租戶,是這樣的:

// Configure application-level defaults. 
var builder = new ContainerBuilder(); 
builder.RegisterType<Consumer>().As<IDependencyConsumer>().InstancePerDependency(); 
builder.RegisterType<BaseDependency>().As<IDependency>().SingleInstance(); 
var appContainer = builder.Build(); 

// Configure tenant identification and start the multitenant container. 
var tenantIdentifier = new MyTenantIdentificationStrategy(); 
var mtc = new MultitenantContainer(tenantIdentifier, appContainer); 

// Configure overrides for existing tenants. 
mtc.ConfigureTenant('1', b => b.RegisterType<Tenant1Dependency>().As<IDependency>().InstancePerDependency()); 
mtc.ConfigureTenant('2', b => b.RegisterType<Tenant2Dependency>().As<IDependency>().SingleInstance()); 

// Set the MVC dependency resolver. 
DependencyResolver.SetResolver(new AutofacDependencyResolver(mtc)); 

如果你需要創建的應用程序運行時租客,你應該能夠做到這一點,只要你以前沒有配置租戶(無重複的租戶ID)。

我認爲它會工作是這樣的:

// Get the current application container. 
var mtc = AutofacDependencyResolver.Current.ApplicationContainer as MultitenantContainer; 

// Configure the new tenant. 
mtc.ConfigureTenant('3', b => b.RegisterType<Tenant3Dependency>().As<IDependency>().InstancePerDependency()); 

其實,我認爲這是這麼簡單。再次,只要你不嘗試重新配置現有的租戶你應該沒問題。

+0

@Glenn可能意味着動態創建租戶實例,而不是創建新種類的租戶?認爲這將使Autofac MultiTenant成爲一個本壘打:) – 2013-03-15 21:59:00

+0

@NicholasBlumhardt我要稍微修改我的答案:重新調查,我不明白爲什麼你不能在飛行中添加租戶。只要你不重複租戶ID ......它應該是確定的。 – 2013-03-15 23:34:44

+0

當我有一些時間,我會給它一個測試,並用結果更新這個問題。 @NicholasBlumhardt你是在正確的軌道上,我只需要一種擁有大量即時創建實例的租戶。我還沒有看,但有沒有辦法確認以前註冊的租戶ID? – 2013-04-02 16:07:04