[英]Nancy, TinyIoC - Stuck in a Box
我已經使用Nancy已有一段時間了,我想我已經將自己放在盒子里了,無法在它外面思考,以至於看不到我在使用Nancy時所犯的錯誤。 我看到的選項我不太喜歡。 如果有某些功能我想念有人可以幫助我,或者我列出的替代方法不好,那么任何幫助將不勝感激。
我正在創建一個小型Web應用程序,其中安裝了普通的燈具。 布局頁面和內容頁面,甚至還有一些局部視圖。
我想創建一個動態菜單系統,該系統將根據登錄的用戶來更改其菜單選項和常規布局。因此,主要工作是會計的用戶可能會看到更多的計費功能,計划的人可能會看到更多的調度功能,等等。
問題是,使用Nancy和TinyIoC無法啟動動態菜單。
最初我以為,“我只是設置一個Menu模塊,然后設置RenderAction或同等功能,這樣我會很好的”,除了Nancy不喜歡這樣。 很好,因為我的替代方法是...在“布局”頁面上的代碼片段中與TinyIoC對話,它將解析我的IMenuManager,並且我可以在其中使用傳入的用戶ID或您擁有的名稱調用其GenerateMenu函數。 我將返回的對象傳遞給@ Html.Partial('path',model),我很高興
除非您真的不能以這種方式與TinyIoC交談。 除非它是Nancy Module本身的擴展,否則您將無法輕松訪問實現的解析接口。
還有其他我沒有看到的選項嗎? 我是否必須放棄TinyIoC並以另一種方式重新實現整個過程?
正如您所提到的,我想您可以采用2種方法中的一種。
我傾向於使用前端框架來管理此類事情,對我來說,它是riot.js或vue.js,但是無論您使用的是Angular / react等,還是適用於同一件事。
基本上,您將調用終結點以返回json結果,這將查看用戶並調用工廠以根據用戶信息獲取菜單服務,然后菜單服務將負責創建結果模型菜單。 然后,客戶端將根據響應構建自己的視圖。
如果按每個請求將菜單下推,則可以使用RenderPartial
進行類似的操作,該方法與基於服務結果的模型包含Menu和MenuView的方法相同。
使用工廠,創建/解析正確的服務,生成菜單,將該菜單以及其他所有內容附加到響應模型,然后渲染部分內容:
@Html.Partial(Model.MenuView, Model.Menu)
我將這種方法用於我的個人項目。
讓我知道您是否需要我進一步解釋。
如果您的需求不太復雜,則可能是在潛意識中嘗試使事情變得過於復雜。
您可以按照以下方式執行以下操作:
@if (Html.RenderContext.Context.CurrentUser.IsAuthenticated())
{
if (Html.RenderContext.Context.CurrentUser.Claims.Contains("Admin"))
{
@Html.Partial("Views/Partials/_AdminMenu")
}
else if (Html.RenderContext.Context.CurrentUser.Claims.Contains("Editor"))
{
@Html.Partial("Views/Partials/_EditorMenu")
}
else if (@Html.RenderContext.Context.CurrentUser.Claims.Contains("Viewer"))
{
@Html.Partial("Views/Partials/_ViewerMenu")
}
else
{
@Html.Partial("Views/Partials/_PublicMenu")
}
}
else
{
@Html.Partial("Views/Partials/_PublicMenu")
}
當然,從后端發回菜單布局更為優雅。 您將只有一個視圖。 這可能更容易實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.