我正在构建一个多租户MVC 4应用程序并使用Autofac作为容器。
我一直在关注Autofac MultiTenant库,但除非我遗漏了一些东西,否则我认为它不符合我的需要。这是我的情况:
我无法找到任何符合我需求的东西,所以我认为我需要考虑一种方法来为每个租户创建自己的生命周期范围。我将如何创造这样的东西?
答案 0 :(得分:3)
[我之前回答过并表示你无法动态注册新租户。这是不正确的,我正在相应更新。
我认为你可以用Autofac.Extras.Multitenant做你想做的事,虽然你想彻底测试它(和let us know if it's broken)。
InstancePerTenant
注册扩展程序。InstancePerTenant
,查看该网址并转换为租户ID。新租户需要在执行期间进行注册项目是我以前认为无法运作但现在我认为会有效。
在app启动时创建租户时,就像这样:
ITenantIdentificationStrategy
如果您需要在应用运行时期间创建租户,只要您之前没有配置租户(没有重复的租户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));
实际上,我认为这很简单。同样,只要您不尝试重新配置现有租户,您应该没问题。