gpt4 book ai didi

asp.net-mvc - 如何在 Ninject 中创建一个根据请求的 Controller 更改的绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 18:16:23 29 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 3 应用程序,并且遇到了以下情况。在我的页面上,我有一个侧栏,它可以包含特定于该页面的相关链接,即由 Controller 类型确定。链接将由当前页面的内容决定。

我关注了Phil Haack's blog post使用 Html.Action 渲染动态侧边栏和一个单独的 Controller 。我喜欢这种方法给我的关注点分离:我的 Controller 对侧边栏一无所知,这是应该的。

我现在想注入(inject) SideBar 的派生类型的实例进入我的SideBarController , 一个 Action 将被调用以呈现侧栏本身。有一种派生类型 SideBar每个 Controller ,所以我发现自己想编写类似这样的代码:

kernel.Bind<SideBar>().ToMethod(_ => controllerName == "foo" 
? new FooSideBar(kernel.Get<UrlHelper>())
: new BarSideBar(kernel.Get<UrlHelper>()));

但是这段代码有很多错误,尤其是我无法在 lambda 中获取 Controller 名称这一事实,以及当第三种类型的 Controller 出现时会发生什么的问题,然后第四等

请注意,我不能使用 WhenInjectedInto<T>() ,如 SideBar实例将始终注入(inject) SideBarController .

值得一提的是 SideBar 的实例目前正在通过 Ninject Factory 扩展创建,因此相关的侧边栏绑定(bind)如下(我硬绑定(bind)了 SideBar 的实现,只是为了证明该方法到目前为止有效):
kernel.Bind<ISideBarFactory>().ToFactory().InRequestScope();
kernel.Bind<SideBar>().To<FooSideBar>().InRequestScope();

最后,我基本上在 SideBar 的派生类型之间进行了一对一的映射。和 Controller 类型。感觉有点像这里可能有点重复,但也代表了组件之间的关系,所以我认为我可以接受。

这一切都让我觉得我解决这部分问题的方法是错误的,所以我欢迎有关如何使用 Ninject 实现干净解决方案的建议。

最佳答案

我会试着回答,但我现在不在电脑附近,所以会有点模糊。

从根本上说,您可以将另一个参数传递给 Html.Action,因此如果该参数是请求或从请求中收集到的内容(例如 Controller 名称或 Url 部分),那么您可以使用它来确定要显示哪个侧边栏。您可能需要将工厂注入(inject)到侧边栏 Controller 中,并使用它来创建正确的 Controller ,或者进行其他一些操作,但是一旦您知道需要哪个侧边栏,它就会变得容易得多。

关于asp.net-mvc - 如何在 Ninject 中创建一个根据请求的 Controller 更改的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604502/

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