问题:
我正在用 Ui、ServiceLayer、BizLayer 和 DataLayer 构建一个四层系统。根据良好实践,ServiceLayer 对 Ui 隐藏了 BizLayer 和 DataLayer,当然 ServiceLayer 不知道 Ui 层是什么。
我的实现是单个 .NET 应用程序,每一层都在自己的程序集中。我在我的 MVC3 Ui 层中使用 Autofac.MVC3 来执行 Web 请求中使用的所有解析类。我还在我的 ServiceLayer 中包含标准 Autofac,以便它可以处理我的应用程序中所有其他层的注册。在系统启动时,我调用一个方法来向 Autofac 注册所有类型。这样做:
- 通过调用 ServiceLayer 中的模块来注册较低级别。它使用标准 NuGet Autofac 包处理自身和所有其他程序集的注册。
- 然后 Ui 层使用 NuGet Autofac.MVC 包注册各种控制器和 IActionInvoker 用于 Action Method 注入。
我的 DataLayer 中的 UnitOfWork 类当前已在 InstancePerLifetimeScope 中注册,因为它是由使用普通 Autofac 的 ServiceLayer 注册的,并且对 InstancePerHttpRequest 一无所知。但是我在这里读到我应该使用 InstancePerHttpRequest 范围。
问题:
我的问题是,我可以传递一个生命周期范围,即 MVC 层可以将 InstancePerHttpRequest 传递到服务层以在需要的地方使用吗?Alex Meyer-Gleaves 在下面这篇文章的评论中似乎暗示这是可能的:
也可以将您自己的 ILifetimeScopeProvider 实现传递给 AutofacDependencyResolver,以便您可以控制在 ASP.NET 运行时之外的生命周期范围的创建
然而,他建议的方式似乎是 MVC 特定的,因为 ILifetimeScopeProvider 是 MVC 扩展类。任何人都可以提出另一种方式或者 InstancePerLifetimeScope 可以吗?