[我以前回答,並表示你不能立即註冊新租戶。這是不正確的,我正在相應更新。
我認爲你可以用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());
其實,我認爲這是這麼簡單。再次,只要你不嘗試重新配置現有的租戶你應該沒問題。
@Glenn可能意味着動態創建租戶實例,而不是創建新種類的租戶?認爲這將使Autofac MultiTenant成爲一個本壘打:) – 2013-03-15 21:59:00
@NicholasBlumhardt我要稍微修改我的答案:重新調查,我不明白爲什麼你不能在飛行中添加租戶。只要你不重複租戶ID ......它應該是確定的。 – 2013-03-15 23:34:44
當我有一些時間,我會給它一個測試,並用結果更新這個問題。 @NicholasBlumhardt你是在正確的軌道上,我只需要一種擁有大量即時創建實例的租戶。我還沒有看,但有沒有辦法確認以前註冊的租戶ID? – 2013-04-02 16:07:04