如何将温莎城堡与 ASP.Net Web 表单一起使用?

2024-04-29

我正在尝试将 Windsor 的依赖注入连接到标准的 asp.net Web 表单。我想我已经使用 HttpModule 和 CustomAttribute (代码如下所示)实现了这一点,尽管该解决方案似乎有点笨拙,并且想知道 Windsor 是否有更好的支持开箱即用的解决方案?

这里有几个文件一起显示

    // index.aspx.cs
    public partial class IndexPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Logger.Write("page loading");
        }

        [Inject]
        public ILogger Logger { get; set; }
    }

    // WindsorHttpModule.cs
    public class WindsorHttpModule : IHttpModule
    {
        private HttpApplication _application;
        private IoCProvider _iocProvider;

        public void Init(HttpApplication context)
        {
            _application = context;
            _iocProvider = context as IoCProvider;

            if(_iocProvider == null)
            {
                throw new InvalidOperationException("Application must implement IoCProvider");
            }

            _application.PreRequestHandlerExecute += InitiateWindsor;
        }

        private void InitiateWindsor(object sender, System.EventArgs e)
        {
            Page currentPage = _application.Context.CurrentHandler as Page;
            if(currentPage != null)
            {
                InjectPropertiesOn(currentPage);
                currentPage.InitComplete += delegate { InjectUserControls(currentPage); };
            }
        }

        private void InjectUserControls(Control parent)
        {
            if(parent.Controls != null)
            {
                foreach (Control control in parent.Controls)
                {
                    if(control is UserControl)
                    {
                        InjectPropertiesOn(control);
                    }
                    InjectUserControls(control);
                }
            }
        }

        private void InjectPropertiesOn(object currentPage)
        {
            PropertyInfo[] properties = currentPage.GetType().GetProperties();
            foreach(PropertyInfo property in properties)
            {
                object[] attributes = property.GetCustomAttributes(typeof (InjectAttribute), false);
                if(attributes != null && attributes.Length > 0)
                {
                    object valueToInject = _iocProvider.Container.Resolve(property.PropertyType);
                    property.SetValue(currentPage, valueToInject, null);
                }
            }
        }
    }

    // Global.asax.cs
    public class Global : System.Web.HttpApplication, IoCProvider
    {
        private IWindsorContainer _container;

        public override void Init()
        {
            base.Init();

            InitializeIoC();
        }

        private void InitializeIoC()
        {
            _container = new WindsorContainer();
            _container.AddComponent<ILogger, Logger>();
        }

        public IWindsorContainer Container
        {
            get { return _container; }
        }
    }

    public interface IoCProvider
    {
        IWindsorContainer Container { get; }
    }

我认为你基本上走在正确的轨道上 - 如果你还没有,我建议你看看 Rhino Igloo,一个 WebForms MVC 框架,这是一篇关于此的很好的博客文章 http://ayende.com/Blog/archive/2007/09/03/Rhino-Igloo-ndash-MVC-Framework-for-Web-Forms.aspx来源是here https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo- Ayende(Rhino Igloo 的作者)在此项目/库中很好地解决了将 Windsor 与 Web 表单结合使用的问题。

如果您要注入整个嵌套的控件集,我会缓存反射信息,我怀疑这最终可能会导致性能消耗。

最后,spring.net 以一种更面向配置的方式来解决这个问题,但可能值得看一下他们的实现 - 这是一个很好的参考博客文章 http://blogger.forgottenskies.com/?p=70关于这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将温莎城堡与 ASP.Net Web 表单一起使用? 的相关文章

  • ModelBinding asp.net MVC 列表

    我有以下课程 public class Movie string Name get set string Director get set IList
  • 自定义可视化 Web 部件属性 sharepoint

    我在 Visual Studio 2012 中创建可视 Web 部件属性时遇到问题 我被提及http msdn microsoft com en us library ee231551 aspx http msdn microsoft co
  • App.Config 和 Web.Config 之间的区别?

    当在 wpf 中构建桌面应用程序时 您可以阅读问题文档并在人们的答案引用 web config 时安全地替换 app config 吗 如果是这样 您是否需要注意任何明显的陷阱 tnx 阅读文档 http msdn microsoft co
  • Windows 事件日志权限

    我需要授予用户哪些权限才能写入 Windows 事件日志 我有一个 ASP NET 应用程序需要模拟用户 并且模拟的用户必须能够写入事件日志 要创建事件日志源 您需要成为管理员 否则您应该能够在没有提升权限的情况下写入它 也许看一下本文 h
  • C# 代码上的 ImageURL 不显示图像

    我在 aspx 页面上有图像
  • 如何在 gridview 控件的项目模板内显示列表视图。

    如何在 gridview 控件的项目模板内显示列表视图 gridview 将列出 table bill 中的所有 bill id 列表视图将绑定 table bill details 中具有特定 item bill id 的所有 item
  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 将 jQuery 验证器规则添加到 ASP 中动态创建的元素

    我在 MVC3 项目的页面上有一些动态插入的表单字段 通常我们会在服务器端添加 jQuery 验证 但在这种情况下我们不能 UI 中的多个字段生成一个隐藏字段的值 这就是提交的内容 我们无法针对隐藏字段进行验证 因此我们必须为用户可以看到的
  • 为什么要加密 ASP.NET 中的查询字符串?

    我正在开发一个用 C ASP NET 编写的 Web 应用程序 该应用程序的原始设计者选择使用加密的查询字符串和Viewstate控制应用程序的 安全 和 状态 在此之前 我来自 GET POST 世界 我没有很好的基础来理解为什么人们会经
  • 关于多客户端和可定制 Web 应用程序的架构所需的建议[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从标签 ID 更改整个 gridview 单元格颜色

    试图弄清楚当我有标签 ID 时如何更改 gridview 单元格的背景颜色
  • Response.Redirect() 将绝对 URL 作为相对 URL 处理

    我有一个 net C 页面 它重定向到绝对 url 例如 Response Redirect rtsp myvideoServer com myVideoAddress mp4 ticket 1234 dt 1234 但重定向后会导致 ht
  • ASP.NET Web API 依赖注入

    我想知道是否可以在 ASP NET Web API 中进行依赖项注入 自定义构造函数 而无需使用第三方库 例如 Unity 或 StructureMap 且无需实体框架 我想要实现的是拥有一个带有构造函数的控制器 例如 public Con
  • 重写规则错误:HTTP 错误 500.50 - URL 重写模块错误。表达式“https://abc.com/{R:1}”无法展开

    每当有人通过 HTTP 协议发出请求时 我都会重写 url 以使其成为 HTTPS 这是 web config 中的代码
  • 有没有一种简单的方法来生成不重复的字符串?

    我知道我可以使用 GUID 生成唯一的字符串 但它太长了 现在我只需要在网站内生成不重复的字符串 我该怎么办 谢谢 例如 在网站上http mathurl com http mathurl com 可以生成一个永久的URL 比如http m
  • 根据所选单选按钮启用文本框

    我有一个单选按钮列表 其中列出了不同的业务类别 最后一个选项是Other类别 当用户选择Other类别 我希望能够启用一个文本框 用户可以输入更多信息来解释Other选择 目前 我正在尝试 If rblCategory SelectedIn
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中

随机推荐

  • Twitter Bootstrap - 动态添加/删除选项卡和选项卡内容

    预先感谢您的任何和所有输入 帮助 建议 我正在使用 Twitter Bootstrap 选项卡来组织一些信息 这些选项卡将位于表单页面上 每个选项卡将包含一个 联系人表单 用户可以在提交整个表单之前将多个联系人添加到此页面 div clas
  • ASP.Net Core 中没有智能感知

    通过 Visual Studio 安装 ASP Net Core gt 新项目 gt Web gt ASP Net Web 应用程序 gt 确定 gt ASP Net 5 模板 安装后重新启动系统 然后创建一个新项目ASP NET 5 Te
  • 用 Ruby 或 Python 解析 SVG 的库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVG 是一个庞大的标准 它基于 XML 我过去曾将 SVG 解析为 XML 然而 有些事情很难 例如
  • 将 tiff 像素长宽比更改为正方形

    我正在尝试对多页 tiff 文件执行条形码识别 但是 tiff 文件是从传真服务器 我无法控制 发送给我的 该服务器以非方形像素长宽比保存 tiff 这导致图像由于纵横比而被严重挤压 我需要将 tiff 转换为方形像素长宽比 但不知道如何在
  • 类型“CombinedVueInstance>>”上不存在属性“XXX”

    我使用 TypeScript 创建了一个 vue 组件 并且在以下位置收到此错误data and in methods Property xxx does not exist on type CombinedVueInstance
  • 制作一个网络爬虫/蜘蛛

    我正在考虑制作一个网络爬虫 蜘蛛 但我需要有人为我指明正确的方向才能开始 基本上 我的蜘蛛将搜索音频文件并为其建立索引 我只是想知道是否有人对我应该如何做有任何想法 我听说用 PHP 完成它会非常慢 我知道 vb net 那么这能派上用场吗
  • 图像未按顺序添加到 pdf 文档 itextsharp 中(元素顺序错误)

    我现在正在使用 iTextSharp 5 4 5 几个星期 本周 我在文档中的元素顺序方面遇到了一些奇怪的事情 我正在制作一份包含主题和图像 图表 的 pdf 报告 该文档的格式如下 NR 主题 1 的主题标题 主题 1 的图表图像 来自
  • Javascript增加最大数组大小[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个大小的数组2 32 4294967296 因为我试图通过运行筛算法来获取 2 32 之前的所有素数 但是 该数组中的任何操作都会出现以下错误 致命错误 CALL AND RETRY LAST 分
  • 增加导航栏高度

    我有以下代码 func navbarbutton UIView animateWithDuration 0 2 animations gt Void in let current self navigationController navi
  • hreflang 应该如何构建?

    我的问题是 应该像上面的所有页面一样 或者应该用每个页面的实际 url 进行更改 例如
  • 缓存行对齐(需要文章澄清)

    我最近在我的应用程序中遇到了我认为是错误共享的问题 我查了一下关于如何将我的数据与缓存行对齐 他建议使用以下 C 代码 C using C 0x alignment syntax template
  • PyCharm 无法解析 docker-compose.yml 以添加 Python 解释器,似乎正在使用旧版本

    我正在设置 PyCharm 的新实例 并想使用 docker compose 设置 Python 解释器 但 PyCharm 似乎不喜欢我的 docker compose 版本 首先 在 构建 执行 部署 gt Docker gt 工具 中
  • 根据内容对列表视图中的相似行进行分组

    i have a listview that displays a set of rows each row is clickable now i wish to group similar type of rows under one h
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些
  • JavaScript 中的异步事件处理

    我在防止双重 多重 方面遇到问题eventListener代码中的处理 var locked button addEventListener click function if locked return locked true calcu
  • 使用 JPA2/Hibernate 保留 java.time.Instant (JDK8)

    JPA 和 Hibernate 目前都不支持 JDK8 中 JSR 310 带来的新日期 时间类 JPAticket https java net jira browse JPA SPEC 63 休眠ticket https hiberna
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 具有 SSL 客户端证书的 iPhone 应用程序

    我正在构建一个 iPhone 应用程序 需要使用客户端证书通过 https 访问 Web 服务 如果我将客户端证书 pkcs12 格式 放入应用程序包中 我就可以将其加载到应用程序中并进行 https 调用 很大程度上要感谢 stackov
  • Security.h 中结构的 macOS 文档

    我正在尝试使用Security h通过 Java 和 JNA 的 macOS 框架 这意味着我需要将某些结构重建为 Java 类 问题是 当我查看文档中的结构时 this one https developer apple com refe
  • 如何将温莎城堡与 ASP.Net Web 表单一起使用?

    我正在尝试将 Windsor 的依赖注入连接到标准的 asp net Web 表单 我想我已经使用 HttpModule 和 CustomAttribute 代码如下所示 实现了这一点 尽管该解决方案似乎有点笨拙 并且想知道 Windsor