asp.net-mvc - MVC 3 ninject 绑定(bind)惰性评估参数

标签 asp.net-mvc ninject ninject.web.mvc

我想用一个惰性求值的参数绑定(bind)我的 Controller 。

 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            return controllerType == null
                       ? null
                       : (IController) _ninjectKernel.Get(controllerType);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

我有下一个绑定(bind):
_ninjectKernel.Bind<IFilesRepository>().To<FilesManager>().WithConstructorArgument("storageFolderAbsolutePath", c => c.ToString());

问题出在 lambda 函数上。我想返回 Server.MapPath("/") ...但我在 c 对象中没有请求上下文。我怎样才能发送它?

最佳答案

我对 Ninject 并不太熟悉,但是您应该能够在容器中注册一个提供程序,以便能够解析 HttpContextBase。 .通过这样做,IFilesRepository现在可以采取HttpContextBase作为构造函数参数,在创建 IFilesRepository 的实例时,将由容器使用提供程序注入(inject).

要注册提供者(使用委托(delegate)来解析服务),

Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));

但是请注意,IFilesRepository 的生活方式很可能需要更改为“按 Web 请求”的生活方式,如 HttpContext.Current是根据 Web 请求创建的,因此您不想在 IFilesRepository 中保留它有更长的生活方式。您可能想要抽象出“映射路径”功能,以便您可以拥有 IFilesRepository拥有更长的生活方式。

关于asp.net-mvc - MVC 3 ninject 绑定(bind)惰性评估参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834203/

相关文章:

dependency-injection - 在 Ninject 上使用 Func 进行构造函数注入(inject)

asp.net-mvc - Ninject 绑定(bind)可以基于 URL/路由值吗?

asp.net-mvc - URL 中的 ASP.NET MVC 冒号

c# - 在 mvc 之类的文件夹中而不是站点根目录中的 Webform 路由主页

asp.net-mvc - 对于每个循环 LINQ 插入给我无法添加已存在的实体

asp.net-mvc - 使用CaSTLe Windsor的Dynamic Proxies实现ASP.NET MVC错误处理

asp.net-mvc-3 - 具有 MVC 属性的 IoC/DI

c# - Ninject 和 XML 配置绑定(bind)

asp.net - 在 MVC3/Ninject 3 环境中使用 ASMX Web 服务的 Ninject

c# - Ninject.Web.Mvc.FluentValidation 和 FluentValidation.MVC4