asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 我的剃刀视图的自定义基页类型,如何使用城堡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>

我怎样才能使用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-mvc – 我的剃刀视图的自定义基页类型,如何使用城堡windsor自动装配属性?全部内容,希望文章能够帮你解决asp.net-mvc – 我的剃刀视图的自定义基页类型,如何使用城堡windsor自动装配属性?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: