asp.net-mvc – 具有插件和多租户支持的ASP.NET MVC应用程序,具
问题
我有一个ASP.NET MVC 3应用程序,具有插件/模块架构和多租户支持. MEF用于解析依赖关系并加载可插入部分. 每个模块由控制器,视图和其他对象组成(在体育上它是一个组件).模块加载到租户. 简单配置可能如下所示: 租户1: >模块A,版本1.0(ModuleA.dll) 租户2: >模块B,版本1.0(ModuleB.dll) 不同模块和不同版本的Dll分别存储在不同的物理位置. 但是,如果我们想在不同租户使用不同模块版本的情况下进行配置,我们会遇到在不同版本中加载相同程序集的问题.这意味着下面的场景不能完全正常工作,因为在从ModuleB解析类型时我们得到了组合不匹配异常(版本1.0和1.5被加载到MEF中,但是只有一个程序集已经通过程序集加载器加载到AppDomain中). 租户1: >模块A,版本1.0(ModuleB.dll) 租户2: >模块A,版本1.5(ModuleB.dll) 解? 因此,我们提出了一个解决方案,即将不同的租户及其模块/组件加载到单独的AppDomain中.这意味着我们的示例Tenant1和Tenant2被加载到AppDomain1和AppDomain2中.在ASP.NET MVC管道中,我们连接到控制器工厂,以便选择适当的应用程序域,如下所示: >请求由默认的AppDomain(Web应用程序启动的那个)处理 >从请求中获取Tenant_Id并从适当的AppDomain解析适当的控制器(我们有Tenant_Id-> Tenant-> AppDomain关系) >返回ControllerProxy(它是一个实现IController的代理类,并继承MarshalByRefObject以便能够在不同的App Domians之间传递控制器) >行动祈求者 >在控制器代理对象上调用正确的操作,现在执行发生在底层应用程序domian中 问题(S): >如何以一种很好的方式在app域之间传递RequestContext(非可序列化对象)? 解决方法
不可能.如果您尝试使用不同的AppDomain,ASP.NET将会回来困扰您.
而是使用基于角色的授权来控制不同模块的访问. 我刚刚在ASP.NET MVC3:http://blog.gauffin.org/2012/05/griffin-mvccontrib-the-plugin-system/中写了一篇关于插件系统的文章 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何将Bitcoin比特币区块链数据导入关系数据库
- asp.net-mvc – 动作链接按钮
- asp.net – 在Response.Redirect()之后调用Response.End()
- asp.net-mvc – 尝试使用Moq模拟HtmlHelper时抛出MissingMe
- asp.net-mvc – 如何使用ASP.NET MVC将某些HTML元素限制为某
- asp.net-mvc – 当我使用Validator.TryValidateObject时验证
- 重定向后ASP.NET会话丢失,但仅限于IE
- asp.net – 如何使RequiredFieldValidator更改父div的css类
- asp.net-mvc – 如何设置AntiForgeryToken cookie路径
- asp.net-mvc – 使用ASP.NET Core和MVC存储本地文件
- 使用ASP.NET Core2.2创建WebApp
- [ASP.NET MVC] 利用动态注入HTML的方式来设计复杂
- asp.net-mvc – 如何使用AngularJs显示MVC登录的
- ASP.NET core Web中使用appsettings.json配置文件
- asp.net-core – “netcoreapp1.0”是一个不受支
- asp.net-mvc – 在ASP MVC中,如何将新视图和文件
- asp.net webforms路由:可选参数
- vsdoc文件是否适用于vbscript?
- asp.net – Visual Studio 2012 – 哪里有ASPX设
- asp.net-mvc-4 – 返回Web API中的自定义错误对象