加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我的剃刀视图的自定义基页类型,如何使用城堡wind

发布时间:2020-12-15 21:02:53 所属栏目:asp.Net 来源:网络整理
导读:我的基页看起来像: namespace ASDF.Mvc.ViewEngines.Razor{ public abstract class WebViewPageTModel : System.Web.Mvc.WebViewPageTModel { public ISomeHelper SomeHelper { get; set; } }} 我的观点/ web.config system.web.webPages.razor host factor
我的基页看起来像:
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中发挥得非常好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读