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 Web API 2中使用Owin OAuth2修改令牌端点响应
- asp.net-mvc – Ninject mvc3无法从程序集加载WebActivator
- asp.net – 在IIS 7或IIS 7.5集成模式下,默认文档中可能不会
- asp.net – 在.NET 4上发现“有潜在危险的Request.Path ……
- asp.net – 外键在VS2012 RC中未被识别
- asp.net – 授权问题 – 匿名用户无法访问.jpeg或.css
- 无法使用ASP.NET AJAX从JSON反序列化Nullable KeyValuePair
- asp.net – 在WCF中将对象数组序列化为JSON以符合OpenSearc
- 使用Asp.NET标识进行LDAP身份验证
- asp.net – 动态加载控件 – 如何访问Page_Init中的值
- ASP.NET Webforms – “从客户端检测到一个潜在危
- asp.net-mvc – 在ASP.NET MVC ViewModel类中获取
- .net – StructureMap单例因参数而异吗?
- asp.net-mvc – ASP.NET MVC的最佳实践
- asp.net-mvc – 来自HttpRequestMessage内容的文
- asp.net-mvc – 将DropDownList绑定到MVC视图中
- asp.net – 我可以在html源代码中看到ViewStateU
- asp.net-mvc – 从n层ASP.Net MVC应用程序的服务
- asp.net-mvc-5 – 如果param是列表,则VaryByPara
- ASP.NET MVC的提示和ASP.NET WebForms开发人员的