我已经使用Nancy已有一段时间了,我想我已经将自己放在盒子里了,无法在它外面思考,以至于看不到我在使用Nancy时所犯的错误。我看到的选项我不太喜欢。如果有某些功能我想念有人可以帮助我,或者我列出的替代方法不好,那么任何帮助将不胜感激。

问题设定

我正在创建一个小型Web应用程序,其中安装了普通的灯具。布局页面和内容页面,甚至还有一些局部视图。

我想创建一个动态菜单系统,该系统将根据登录的用户来更改其菜单选项和常规布局。因此,主要工作是会计的用户可能会看到更多的计费功能,计划的人可能会看到更多的调度功能,等等。

问题本身

问题是,使用Nancy和TinyIoC无法启动动态菜单。

最初我以为,“我只是设置一个Menu模块,然后设置RenderAction或同等功能,这样我会很好的”,除了Nancy不喜欢这样。很好,因为我的替代方法是...在“布局”页面上的代码片段中与TinyIoC对话,该代码片段将解析我的IMenuManager,并且我可以在其中使用传入的用户ID或您拥有的名称调用其GenerateMenu函数。我将返回的对象传递给@ Html.Partial('path',model),我很高兴

除非您真的不能以这种方式与TinyIoC交谈。除非它是Nancy Module本身的扩展,否则您将无法轻松访问实现的解析接口。

我考虑过的其他选择


我考虑过要使用JavaScript / jQuery对MenuModule进行AJAX调用并以这种方式获取信息,但是这感觉很脏,因此我不喜欢它。
我考虑过的另一个其他选择是,将所有出现的Page Models都封装为PageModel.MenuModel和PageModel.RealPageModel。这也真的很脏,我不是粉丝。


还有其他我没有看到的选项吗?我是否必须放弃TinyIoC并以另一种方式重新实现整个过程?

最佳答案

正如您已经提到的,我想您可以采用2种方法中的一种。

我倾向于使用前端框架来管理这类事情,对我来说,它是riot.js或vue.js,但是无论您使用的是Angular / react等,还是适用于同一件事。

基本上,您将调用端点以返回json结果,这将查看用户并调用工厂以根据用户信息获取菜单服务,然后菜单服务将负责创建结果模型菜单。然后,客户端将根据响应构建自己的视图。



如果按每个请求将菜单下推,则可以使用RenderPartial进行类似的操作,方法是相同的,其中模型基于服务的结果包含Menu和MenuView。

使用工厂,创建/解析正确的服务,生成菜单,将该菜单以及其他所有内容附加到响应模型,然后渲染部分内容:

@Html.Partial(Model.MenuView, Model.Menu)

我将这种方法用于我的个人项目。

让我知道您是否需要我进一步解释。

关于c# - Nancy,TinyIoC-卡在盒子里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38136893/

10-12 03:55