InRequestScope提供程序(自定义ViewEngine)只在appstart调用一次



我想注入一个自定义ViewEngine到我的MVC网站。我是这样做的:

private static IKernel CreateKernel()
{
   kernel.Bind<IViewEngine>().ToProvider(new RazorViewEngineProvider()).InRequestScope();
}

This is my provider:

public class RazorViewEngineProvider : Provider<RazorViewEngine>
{
    protected override RazorViewEngine CreateInstance(IContext context)
    {
        return new RazorViewEngine();
    }
}

问题是:我的提供商只在我第一次访问网站时被调用一次。下次我的提供者不知何故仍在缓存中。这不是我想要的。

我希望提供程序对每个请求执行。我想我可以用。inrequestscope()做到这一点,但这没有任何区别。有人知道发生了什么吗?

在这种情况下视图引擎没有被Ninject缓存。不是MVC本身每次都从IDependencyResolver请求它。但我认为这是正确的行为。这样,通过重用它,它可以将创建视图引擎的开销降至最低。

你不应该在你的视图引擎中有一个请求依赖的依赖项。这种依赖关系必须从视图模型中检索,并且必须由控制器分配。

你应该删除InRequestScope。否则,它将在第一次请求后由Ninject处理,但MVC仍将尝试重用它。

而不是注入自定义视图引擎,你可以尝试使用Application_Start()代替:

protected void Application_Start()
{
   ViewEngines.Engines.Clear();
   ViewEngines.Engines.Add(new RazorViewEngineProvider());
   RegisterRoutes(RouteTable.Routes);
}

以这种方式注册会发生什么?它有用吗?

相关内容

  • 没有找到相关文章

最新更新