在VS 2013中向Orchard解决方案添加新模块后,在Home Controller的Index方法中,我将会话中的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服务后,重定向到WebForms页面:default.aspx
已完成。这确实可以成功重定向。
问题是,当我在ASPX页面中访问上面的Session [“OrchardCMServices”]时,ContentManager被释放,我无法使用GET方法进行查询。错误是:对象处置
如何在从MVC重定向到Asp.NET的同时禁用/防止处理会话对象?我在MVC应用程序的modules
中找不到任何web.config
设置。
答案 0 :(得分:1)
Orchard中的服务具有不同的范围,具体取决于其用途。 IOrchardServices具有终身请求范围,因此它将在请求结束时销毁。
请求:为每个新的HTTP请求创建一个依赖项实例,并在处理完请求后销毁。通过从IDependency派生您的接口来使用它。该对象应该相当便宜创建。 http://docs.orchardproject.net/Documentation/How-Orchard-works
你可以看到IOrchardServices是一个IDependency。
public interface IOrchardServices : IDependency {...
因此,您不应尝试将服务存储在当前会话中。如果您需要在视图中访问该服务,可以使用以下工作上下文来解决它:
var orchardServices = WorkContext.Resolve<IOrchardServices>();
或者,如果您的模块有一个渲染页面的控制器,您可以正常注入依赖项。