asp.net – 依赖注入:在aspx页面中注入用户控件
我需要构建一个’可自定义的’asp.net Web应用程序(不是asp.net mvc).
我正在考虑使用IoC容器将用户控件注入aspx页面. 有人试过吗? 简而言之,我认为这可以实现: >我使用Scott Guthrie的方法构建可重用的“用户控件库”(请参阅??他的文章“创建和使用用户控件库”). 而已. 这基本上可以通过这里讨论的Spring.Net来完成,如此处讨论的那样,但注入用户控件. 有没有人对这些东西有一些经验?还是听起来很傻?备择方案 ? 我们的想法是可以在我的“用户控件库”之上构建不同的Web应用程序,而无需触及该库. 例如:在我的库中,我有一个包含4个文本框的页面,对于一个特定的应用程序,我需要添加一个文本框,而不更改页面的代码.我们的想法是在该页面中放置一个占位符,并在此占位符中动态注入我的自定义文本框. 解决方法
它与您的情况不完全相同,但我需要动态注入编辑器控件,具体取决于正在编辑的实体的运行时类型.我的所有控件都是从这样的通用接口继承而来的:
public interface IEditor { bool CanHandle(EntityBase entity); void Display(EntityBase entity); void Save(EntityBase entity); } public partial class AddressEditor : UserControl,IEditor { public bool CanHandle(EntityBase entity) { return (entity is Address); } public void Display(EntityBase entity) { var address = (Address)entity; addressLine1Textbox.Text = address.Line1; // etc... } public void Save(EntityBase entity) { var address = (Address)entity; address.Line1 = addressLine1Textbox.Text; // etc... } } 然后使用IoC容器(在这种情况下为StructureMap),我可以使用类似的东西获得正确的用户控件 var editorControl = ObjectFactory.GetAllInstancesOf<IEditor>().First(x => x.CanHandle(myEntity)); 这是它变得棘手的地方,如果您像这样创建一个实例,则无法向页面添加用户控件.您需要知道它的.ascx文件的位置.您可以通过编辑器界面公开它,以便每个控件返回它: public string AscxFile { get { return "~/UserControls/AddressEditor.ascx"; } } // Implements IEditor.AscxFile 然后在调用页面中,使用LoadControl: var actualControl = LoadControl(editorControl.AscxFile); editorPlaceholder.Controls.Add(actualControl); editorControl.Display(myEntity); 我更喜欢使用复合控件,他们需要更多的努力来创建,但不需要担心.ascx文件,我可以直接将其添加到页面: var editorControl = ObjectFactory.GetAllInstancesOf<IEditor>().First(x => x.CanHandle(myEntity)); editorPlaceholder.Controls.Add((Control)editorControl); editorControl.Display(myEntity); 确保你在Page.OnInit阶段添加控件以便它可以参与ViewState,并且它不会在回发之间被记住,所以你必须每次都这样做. 最后一步是使用您选择的IoC工具进行连接,我使用StructureMap自动加载IEditor的所有实例,但我可以在应用程序代码或xml配置中的任何位置改变它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 当我在gridview中进行排序时触发了Gridview Row
- IIS应用程序池_缓存回收
- asp.net-mvc – ASP.NET MVC中的Crystal Reports
- ASP.Net MVC帮助重构
- asp.net – “HttpContext.Current”属性和相关事物的交叉线
- asp.net – 如何在使用edmx文件时在连接字符串中指定元数据
- asp.net – 为会话设置文化
- ASP.net页面在import语句中获取错误,但我有参考的地方吗?
- asp.net – 如何直接在aspx布局页面中嵌入SharePoint 2013
- asp.net – 从源代码管理中排除app.config?