asp.net-mvc – 我的剃刀视图的自定义基页类型,如何使用城堡wind
我的基页看起来像:
namespace ASDF.Mvc.ViewEngines.Razor { public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> { public ISomeHelper SomeHelper { get; set; } } } 我的观点/ web.config <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="ASDF.Mvc.ViewEngines.Razor.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor> 我怎样才能使用Castle连接SomeHelper. 现在回来是null,我已经连接了ISomeHelper,并且我的控制器/存储库/服务类的工作正常. 我猜这个WebViewPage是在我的容器无法访问的地方调用的(比如在控制器级别). 我如何让它工作? 解决方法
关于依赖注入这样的自定义网页的第一件事是你不能使用构造函数注入.很遗憾,我希望他们在未来的版本中能够改进这一点.原因是实现它的实际类是由ASP.NET引擎在运行时动态发出的.
所以我们目前只能使用属性注入. 因此,一种可能性是使用自定义IDependencyResolver.不幸的是IDependencyResolver doesn’t play nice with Castle Windsor.例如,与Ninject相比,本来就是小菜一碟.您所要做的就是使用[Inject]属性修饰SomeHelper属性: [Inject] public ISomeHelper SomeHelper { get; set; } 并且它将由Ninject自动连接,因为它使用自定义IDependencyResolver.我担心温莎你必须手动这样做.因此,您可以在Global.asax中公开您的容器,然后: public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> { protected WebViewPage() { SomeHelper = MvcApplication.WindsorContainer.Resolve<ISomeHelper>(); } public ISomeHelper SomeHelper { get; set; } } 我知道这很糟糕,但我担心这是严酷的现实.或者转换到Ninject?它在ASP.NET MVC 3及其IDependencyResolver中发挥得非常好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Dropzone没有绑定到模型
- asp.net – 为什么Jet OLEDB驱动程序缓存我的MDB文件?
- asp.net-mvc-4 – 如何让你的MVC控制器DRY为Edit-> Save->
- asp.net-mvc – 获取表单域的生成clientid
- ASP.NET MVC3中具有多个类的ActionLink
- 如何使用ASP.NET Core将图像保存到数据库?
- 如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
- ASP.NET FormsAuthentication cookie值的内容是什么?
- jqgrid与asp.net webmethod和json使用排序,分页,搜索和LINQ
- asp.net-mvc-3 – Razor语法中的ValidateRequest