Я написал мультитенантное веб-приложение в MVC2. Добавление / удаление учетной записи так же сложно, как добавление / удаление строки в таблице, так как я выбрал общую базу данных, подход с использованием общей схемы.
Это очень хорошая статья о мультитенантной базе данных MSDN: Мультитенантная архитектура данных
Все, что мне нужно было сделать в MVC, - правильно настроить маршрутизацию, поэтому первая часть пути - это имя учетной записи:
- www.yourdomain.com / Account1 /...
- www.yourdomain.com / account2 /...
- www.yourdomain.com / account3 /...
и у меня есть пользовательский MvcHandler для поиска учетной записи для каждого запроса:
public class AccountMvcHandler : MvcHandler
{
public AccountModel Account { get; set; }
public AccountMvcHandler(RequestContext requestContext)
: base(requestContext)
{
}
protected override IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state)
{
string accountName = this.RequestContext.RouteData.GetRequiredString("account");
Account = ServiceFactory.GetService<IAccountService>().GetAccount(accountName);
// URL doesn't contain valid account name - redirect to login page with Account Name textbox
if (Account == null)
httpContext.Response.Redirect(FormsAuthentication.LoginUrl);
return base.BeginProcessRequest(httpContext, callback, state);
}
}
Как сказал Андреас Паулссон, ключевая фраза - "пользовательские сборки". Зачем вам нужны «пользовательские сборки» для конфигурации? Вы используете CodeEmit? Будут ли пользователи загружать их? Я бы предпочел использовать Windows Workflow Foundation для любой индивидуальной настройки бизнес-логики.