gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:03:19 25 4
gpt4 key购买 nike

我想用一个惰性求值的参数绑定(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com