asp.net-mvc - 我的 Razor View 的自定义基本页面类型,如何使用城堡温莎 Autowiring 属性?

标签 asp.net-mvc asp.net-mvc-3 razor castle-windsor

我的基本页面如下所示:

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>

我怎样才能将其连接起来,以便 SomeHelper 将使用 CaSTLe 连接起来。

现在返回 null,我已经连接了 ISomeHelper,并且对于我的 Controller /存储库/服务类来说一切正常 .

我猜这个 WebViewPage 在我的容器无法访问的地方被调用(比如在 Controller 级别)。

我怎样才能让它工作?

最佳答案

关于像这样的自定义网页的依赖注入(inject)的第一件事是你不能使用构造函数注入(inject)。很遗憾,我希望他们会在 future 的版本中改进这一点。原因是实现它的实际类是由 ASP.NET 引擎在运行时动态发出的。

所以我们目前只能使用属性注入(inject)。

因此,一种可能性是使用自定义 IDependencyResolver .不幸的是 IDependencyResolver doesn't play nice with Castle Windsor .例如,使用 Ninject 将是小菜一碟。您所要做的就是装饰SomeHelper属性与 [Inject]属性:

[Inject]
public ISomeHelper SomeHelper { get; set; }

Ninject 会自动连接它,因为它使用自定义的 IDependencyResolver。恐怕在 Windsor 中,您将不得不手动执行此操作。因此,您可以在 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-mvc - 我的 Razor View 的自定义基本页面类型,如何使用城堡温莎 Autowiring 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734826/

相关文章:

asp.net-mvc - 将模型传递给 RedirectToAction()

asp.net-mvc - 编辑时的 ASP.NET MVC3 模型绑定(bind)

asp.net-mvc - OnValidateIdentity session 为空 - Mvc Owin

json - Angular : Pass JSON Parameter to Controller for filtering

asp.net-mvc - RavenDb 与 ASP.NET MVC 3 - 如何生成带有 ID 的 URL?

jquery - 使用 jquery 的 cshtml 中的电子邮件验证正则表达式弹出错误

c# - 检查以逗号分隔的字符串中的任何 id 是否与另一个字符串数组中的任何 id 匹配

c# - 如何在不使用mvc3的构造函数模式的情况下从ninject获取资源

c# - 潜在危险请求,隐藏错误

css - 带有布局的 ASP.NET MVC Razor - CSS 链接但未应用