2

我正在开发一个基于 ASP.Net MVC 的多租户应用程序。根据用户设置,站点需要重定向到该用户的单独模块/区域。每个区域都使用一些通用服务,但是每个区域/模块的站点外观和导航完全不同。模型也被基础库覆盖,我们需要单独的团队来开发模块(包括控制器、视图和模型)。

我们正在考虑使用 Unity 或 Ninject 等依赖注入工具。问题是我们如何在主网站内注入完整的模块/区域。控制器和模型部分很好理解。不清楚的是如何开发视图以便搜索和使用正确的视图。

更新
我们需要与不同的团队一起开发这个应用程序。每个团队将为每个子站点/区域开发一个模块。有一个业务层提供通用服务、框架和工作流。MVC 主要是一个表示层。每个团队使用该客户的特定品牌为每个客户开发一个子站点。随着我们添加更多客户,我们需要添加更多站点。我们可以使用主题等。但是,客户有不同的屏幕和每个屏幕的不同字段集。所有这些字段都捕获相似的数据,但是最终用户扮演不同的角色来捕获数据。例如,前台人员捕获不同的编号。每个客户和后端人员的字段数完成其余部分。同样,可能有多个用户面向客户的客户(访问者)。有一个通用组件用于管理访客流量、每个办公会话中的前台等。问题是我们如何独立开发 MVC 子站点并使用依赖注入将它们置于一个通用站点下。特别是意见。部署脚本是唯一的选择吗?

4

1 回答 1

1

据我了解。

您的目标是将依赖注入与 Ninject 之类的东西一起使用,以便您可以在应用程序中使用的特定区域中基于控制器注入不同的实现?

如果是这种情况,您可以设置 NinjectModules,通过 Ninject Named 属性绑定由接口或抽象类定义的特定服务的某些实现,您可以将其放置在控制器构造函数中。

例如,您可能有一个通用搜索控制器,它在某个区域向公众开放,例如

http://example.com/users/home/search _ _

使用 Ninject 命名属性,您可以注入该控制器使用的 ISearchService 的实现,这可能为公共用户提供有限数量的功能来搜索属性,

但是在站点的其他区域,例如管理员或在站点上发布自己的属性的用户可能会通过搜索功能获得更多访问权限

http://example.com/租户/home/search

这个 HomeController 可以有一个不同的 ISearchService 注入实现,它通过它的构造函数传递。

只需确保在 Global.asax 中加载所有 NinjectModules

这可以在此处的 Ninject Contextual Bindings 文档下找到

我在这里提供的信息很少,如果您提供更多关于您在架构设计考虑方面面临的问题的上下文/代码示例,您可能会得到更好的答案。

于 2013-06-04T07:07:53.157 回答