我最近重构了我的MVC应用程序以使用Unity依赖注入来解决依赖关系,这非常棒。它更易于分解等等。Unity - 使用请求中的信息来解决依赖关系
我现在正在做的是为多个租户添加功能来使用它。我使用的方法(以便其余代码不必知道租户多少)正在创建诸如租户过滤版本的存储库接口(这只是另一个存储库的代理...)所以它会调用其中一个底层方法,然后检查记录是否有合适的租户并相应地执行)。这让我基本上可以模拟为每个租户设置一个完全独立的存储,即使数据在数据不隔离的情况下也是如此,所以客户代码的相对较少需要更改。
所有这一切的问题是它如何适应DI方式的做事。我打算做的是,在请求开始时,检测主机名,然后使用它来确定租户(每个租户都将拥有数据库中的主机名列表)。虽然我正在使用每个请求的生命期来处理Unity正在构建和解决的大多数对象,但我并没有真正了解Unity如何“知道”要使用的租户,因为它需要关于请求的数据(我想控制器会有,但我不认为在我的容器配置方法中可用)和访问数据库以了解哪个主机(并且几乎不需要让我的容器配置进行数据库调用)。我可以通过只传递一个主机名来解决#2,并让租户的类去确定哪个租户被引用,但这对#1没有帮助。
现在我正在使用“财产注入”(也被称为“一个公共财产”在较低的高度falutin'圈子),但我不明白我将如何避免让我的控制器成为一个实际提供租户数据,所以现在我不是真的只有一个组合根控制一切。
有没有一种方法可以在组合根中做到这一点,或者我应该让自己屈服于让控制器完成这项工作?
但是我怎样才能找到该方法的网址?这一点不在范围内,是吗? – Casey
我想我可以用这种方式真正简洁地描述我的问题:做我想做的事情我需要访问组合根内的请求数据,但据我所知我没有访问当我配置容器时的任何当前请求上下文。 – Casey
'HttpContext.Current.Request.Url' –