asp.net-mvc – MVC3,Ninject,MvcSiteMapProvider – 如何将依赖注入到重写方法
|
我有一个使用 Ninject和 MvcSiteMapProvider的MVC3应用程序. 我创建了这个类,MvcSiteMapProvider使用它来动态地将节点添加到我的站点地图: public class PageNodeProvider : DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
// need to get repository instance
var repository = // how do I get this???
foreach (var item in repository.GetItems())
{
yield return MakeDynamicNode(item);
}
}
}
MvcSiteMapProvider本身实例化了这个类型,所以我不确定如何将我的存储库注入其中. 我想通过在我的内核上获取句柄并在方法中调用Get< Repository>()来考虑使用服务位置.但是,在查看NinjectHttpApplication的定义时,我看到了这个属性: // Summary:
// Gets the kernel.
[Obsolete("Do not use Ninject as Service Locator")]
public IKernel Kernel { get; }
不要使用Ninject作为服务定位器?!我该怎么办呢? 我应该做些什么? 解决方法这似乎是“为什么提供商是糟糕的设计?”一书的另一章.您遇到与任何类型的ASP.NET提供程序相同的问题.对他们来说,没有真正好的和令人满意的解决方案.只是黑客.我认为你最好的选择是分叉项目并更改DefaultSiteMapProvider以使用DepencencyResolver而不是Activator,并将实现提供回社区.然后,您可以在PageNodeProvider实现中使用构造函数注入.这将解决所有类型和每个人的问题. 当然,您也可以在实现中使用DependencyResolver.但到目前为止,这不是最佳解决方案,因为您应该尽可能地让实例接近根,这会使测试变得更加复杂,并且它只为您解决问题. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.Net Forms身份验证在10分钟后注销用户
- asp.net-mvc-3 – 如何将int数组传递给RouteValueDictionar
- asp.net – 如何防止PDF文档下载到用户PC?
- 为什么私有事件处理程序在ASP.NET中不起作用
- asp.net-mvc – 如何最好在服务器上安装MVC 3?
- asp.net-mvc-2 – 将日期参数传递给RedirectToAction Route
- 如何阻止MVC缓存调用动作方法的结果?
- asp.net-mvc-3 – MVC3 Ajax.ActionLink
- asp.net-mvc-3 – 剃刀索引视图中的条件格式
- asp.net-mvc – Azure网站上的字体文件404,看似正确的MIME
- .net – MVC 4中MVC 4中强类型ActionLink的语法是
- ASP.NET-MVC.如何从URL获取控制器名称?
- asp.net – 使用Razor有点像回到经典的asp
- asp.net – VirtualPath位于当前应用程序根目录之
- 在ASP.NET 3.5中的Response.Clear
- asp.net-mvc – 在同一页面上创建新的父项和子节
- asp.net – 将网站置于维护模式?
- asp.net-mvc-5 – aspnet身份避免同时登录同一帐
- asp.net-mvc-3 – 如何创建Quartz.NET的工作,需要
- asp.net-mvc – Azure托管的ASP.NET MVC网站删除
