asp.net-mvc – 使用Sharp Architecture注册自定义模型绑定器
我是MVC(我使用的是ver.3)和Sharp Architecture的新手,我很难弄清楚如何使用自定义模型绑定器.
我有一个名为Teacher的域对象(不是视图模型),以及以标准Sharp Architecture方式完成的存储库ITeacherRepository.我注册这条路线: routes.MapRoute( "Teacher","Teacher/{tid}/{action}",new { controller = "Teacher",action = "Index" }); 而TeacherController上的Index方法如下所示: public ActionResult Index(int tid) { Teacher t = TeacherRepository.Get(tid); if (t == null) throw new InvalidOperationException("No such teacher"); TeacherDisplay display = new TeacherDisplay(t); return View("Index",display); } 一切正常.现在我想采取下一步,并为Teacher实现自定义模型绑定器,因此控制器方法可以如下所示: public ActionResult Index(Teacher t) { if (t == null) throw new InvalidOperationException("No such teacher"); TeacherDisplay display = new TeacherDisplay(t); return View("Index",display); } 我写了一个原始模型绑定器: public class TeacherBinder : SharpArch.Web.ModelBinder.SharpModelBinder { private ITeacherRepository teacherRepository = null; public TeacherBinder(ITeacherRepository repo) { this.teacherRepository = repo; } public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { int tid = (int)bindingContext.ValueProvider.GetValue("tid").ConvertTo(typeof(Int32)); Teacher t = teacherRepository.Get(tid); return t; } } 而现在我被卡住了.如何在Sharp Architecture项目中正确注册?我想我也必须将它插入Castle Windsor配置中.我是否应该有一个接口ITeacherBinder,并在温莎注册? 编辑 澄清我的问题:我无法弄清楚如何注册我的模型绑定器,以便MVC框架将通过Windsor实例化它,因此负责传递所需的构造函数参数.控制器由Windsor实例化,这在global.asax.cs中被这一行连接起来: ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); 我没有看到一个等效的模型制造商工厂. 解决方法
注册的一种方法是在Global.asax中的Application_Start方法中添加以下行
ModelBinders.Binders.Add(typeof(Teacher),new TeacherModelBinder()); 这http://www.dominicpettifer.co.uk/Blog/39/dependency-injection-in-asp-net-mvc-2—part-2–modelbinders-viewmodels描述了不同的方式. 要通过Castle Windsor,您可以将以下代码添加到ComponentRegistrar.cs(位于CastleWindsor文件夹中) container.Register(AllTypes.Of()?????????.FromAssembly(typeof运算(TeacherBinder).Assembly)?????????.Configure(c => c.LifeStyle.Singleton.Named(???????????c.Implementation.Name.ToLower()))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在ASP.NET中最好地填充HTML表?
- asp.net-mvc-5 – MVC 5表单身份验证为User.Identity.Name返
- asp.net-mvc – 处理ASP.NET MVC中的路由错误
- asp.net-mvc – 谷歌日历无法读取ICalendar.
- ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuccess OnFai
- asp.net-mvc – 使用MVC 5中的Entity Framework Database F
- asp.net – IIS7:禁用子应用程序中的HttpModule – 站点,应
- asp.net-mvc – 如何为ASP.NET 4.5 Web API创建MultipartFo
- asp.net – 在aspx中缩短名称空间别名
- asp.net – Ajax Control Toolkit正在加载太多脚本资源
- asp.net-mvc – MVC“添加控制器”是“无法检索元
- ASP.NET中TextBox控件设立ReadOnly="true
- asp.net – 如何在EnableSessionState =“False”
- asp.net-mvc-3 – 没有表单身份验证的AntiForger
- asp.net-mvc – ASP.NET MVC – 仅经过身份验证的
- 如何调查ASP.net应用程序上的SQL Server超时错误
- asp.net-web-api – SimpleInjector RegisterWeb
- asp.net-mvc – 如何在不依赖NHibernate的情况下
- asp.net – 如何使用app_GlobalResource或app_Lo
- 如何在Asp.Net MVC 2中通过JQuery调用重载的C#函