小编Yur*_*rov的帖子

我应该将服务注入我的MVC视图吗?

我们正在使用ASP.NET MVC技术开发某种云CMS,并且在途中遇到了一些障碍.用户可以通过控制面板更改许多参数,我们需要在视图中结束这些参数.例如,Facebook应用程序ID初始化Facebook JS API.或者在页面上显示其他文本.或背景图片.目前我们没有使用DI来传输这些参数,而是将它们添加到ViewModel中,但这破坏了ASP.NET MVC处理模型的方式(例如表单验证,绑定等)

看起来使用DI注入提供参数,文本和图片的服务可能会使我的视图更少依赖于特定于控制器,甚至还有一些Microsoft技术可以做到这一点http://www.asp.net/mvc/tutorials/动手实验/ aspnet-mvc-4-dependency-injection#Exercise2.但是,在论坛上有很多答案反对使用DI将服务注入到视图中.

所以问题是:将一些服务注入视图的正确方法是什么?或者我根本不应该这样做,应用程序设计出了什么问题?

更新:一些真实的代码示例(现在我们使用Model来注入服务)

从数据库中注入文本(它们必须是用户可编辑的,因为它是CMS):

<div class="steps">@Html.Raw(Model.Texts["Main", "Step2"]</div>
Run Code Online (Sandbox Code Playgroud)

从数据库中注入翻译(实际上,它是本地化):

<div class="gonfalon">@Model.Translations["Title_Winners"]</div>
Run Code Online (Sandbox Code Playgroud)

注入参数(来自数据库,可能是特定于请求的;例如,如果站点具有不同的域,则facebook应用程序应为每个域):

Facebook.Initialize(Model.Parameters["FbApplicationId"], Model.Parameters["FbApplicationSecret"]);
Run Code Online (Sandbox Code Playgroud)

当前方法的问题在于此代码取自竞赛机制.处理自定义文本,翻译或Facebook应用程序ID绝对不在竞争业务范围之内.它也破坏了模型作为模型模型而不是实际的业务领域,但处理很多事实际上属于View(如翻译和自定义文本)

更新2:修改了以下答案的片段,使其更具通用性:

public static class WebViewPageExtensions 
{ 
    public static I ResolveService<I>(this WebViewPage page) 
    { 
         return DependencyResolver.Current.GetService<I>(); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc dependency-injection

6
推荐指数
1
解决办法
2617
查看次数

单页JavaScript MVC应用程序的注释框架,例如Disqus for AngularJS

我正在研究没有任何后端的单页AngularJS应用程序,但使用mongolab来存储数据.

它还通过使用相同的URL进行所有调用(如CRUD和过滤),仅更改hashbang(#)之后的部分.

所以URL看起来像mysite.com/#!/主页面,mysite.com/#!/view/:id用于查看故事,mysite.com/#!/edit/:id编辑它等.

我想使用一些第三方托管的评论工具来允许用户评论每个故事.我已经尝试过Disqus和Livefyre,但是他们在hashbang之前与URL绑定,因此所有网站页面都只是他们的单页.我试图重新加载Disqus,但它每次尝试重新附加它自己的javascript,所以多次加载会导致js错误.我查看了Facebook评论,但它甚至没有页面ID,所以评论只针对每个网站.

Disqus拥有它自己的API,但是没有最新(且唯一)版本的API(3.0)的JS绑定,并且我自己创建绑定看起来有点过分.

有没有人知道好的JS评论框架,我可以使用AngularJS或任何可以提供帮助的托管解决方案?

javascript comments singlepage angularjs

4
推荐指数
1
解决办法
1180
查看次数