我是新來的MVC(我使用ver.3)和夏普體系結構,我無法弄清楚如何使用自定義模型聯編程序。註冊夏普體系結構的自定義模型聯編程序
我有一個名爲Teacher
的域對象(不是視圖模型),以及以標準的夏普體系結構方式完成的存儲庫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;
}
}
現在我卡住了。我如何在夏普架構項目中正確註冊?我假設我也必須將其插入Castle Windsor配置中。我是否也應該有一個接口ITeacherBinder
,並在Windsor註冊?
編輯
爲了澄清我的問題:我無法弄清楚如何註冊我的模型綁定,這樣的MVC框架將通過溫莎實例化,並因此採取傳遞所需的構造函數參數的照顧。控制器是由溫莎實例化,這是在global.asax.cs
迷上了這一行:
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));
我沒有看到的等效模型生成器工廠。
該鏈接就是我正在尋找的。謝謝。 – 2011-05-10 00:34:21