0

在 VS 2013 中向 Orchard 解决方案添加新模块后,在 Home Controller 的 Index 方法中,我将 Session 中的 IOrchardServices 保存为:

public class HomeController : Controller
    {
        public IOrchardServices Services { get; set; }

    public HomeController(IOrchardServices services)
    {
        Services = services;
        T = NullLocalizer.Instance;
    }

    public Localizer T { get; set; }

    public ActionResult Index()
    {
           Session["OrchardCMServices"] = Services;
           return Redirect("/OrchardLocal/modules/HelloWorld/default.aspx");
    }

将 Orchard 服务存储在 Session 中后,重定向到 WebForms 页面:default.aspx 完成。这确实重定向成功。

问题是当我在我的 ASPX 页面中访问上述 Session["OrchardCMServices"] 时,ContentManager 被释放,我无法使用 GET 方法进行查询。错误是:对象已处置

如何在从 MVC 重定向到 Asp.NET 时禁用/防止处理会话对象?我没有在 MVC 应用程序中找到任何modules设置。web.config

有没有办法让 Orchard Services (ContentManager) 在 Web 表单上可用?

在此处输入图像描述

4

1 回答 1

1

Orchard 中的服务根据其目的而具有不同的范围。IOrchardServices 具有请求的生命周期范围,因此它将在请求结束时被销毁。

请求:为每个新的 HTTP 请求创建一个依赖实例,并在处理请求后销毁。通过从 IDependency 派生接口来使用它。该对象的创建成本应该相当低。 http://docs.orchardproject.net/Documentation/How-Orchard-works

你可以看到 IOrchardServices 是一个 IDependency。

public interface IOrchardServices : IDependency {...

因此,您不应尝试将服务存储在当前会话中。如果您需要在视图中访问服务,您可以使用如下工作上下文来解决它:

var orchardServices = WorkContext.Resolve<IOrchardServices>();

或者,如果您的模块有一个正在呈现页面的控制器,您可以照常注入依赖项。

于 2015-08-25T13:34:01.490 回答