Any*_*One 7 .net c# asp.net-mvc inversion-of-control interceptor
我最近对拦截器概念感兴趣.我知道这个概念在许多库中使用,如NHibernate,Entity Framework等.但我对如何在ASP.NET MVC Web应用程序中使用此概念感兴趣.
在Mvc Web应用程序中使用它有用吗?
有没有使用拦截器的开源Asp.Net Mvc项目?
Asp.net Mvc已经支持一种带过滤器的控制器拦截器.最好使用过滤器而不是拦截器?
Dan*_*ing 13
查看您开发的先前应用程序并检查代码.查找在方法和属性的开头或结尾经常重复的代码.这是您可以考虑从所有这些方法转移到拦截器的代码.例如,我注意到我的许多执行输入验证的MVC操作使用相同的几行代码:
if (!ModelState.IsValid)
return View(model);
Run Code Online (Sandbox Code Playgroud)
这是可能被移动到拦截器的代码(在这种情况下可能是MVC过滤器).编写和应用过滤器的成本是否超过此重复代码的成本?(2行代码乘以使用此代码的控制器操作数).在这种情况下,也许不是.然而,在其他情况下,使用拦截器的好处会更大.
下面是一些情况,我想这类型的代码重复可能发生,即一个列表是场景的气味像他们能从中获益的拦截器:
using (var transaction = Session.BeginTransaction())
{
// ... do some work that is unique to this method ...
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
AuthorizeAttribute
是一个过滤器.Thread.Sleep
在必要时使用.Dispose
如果它处于Faulted
状态, 则不能是WCF客户端,因此创建和销毁客户端实例的每个方法都需要检查状态,然后Abort
在必要时调用而不是简单地using
在客户端周围包装子句.在这种情况下,拦截器可能不是最合适的.修复Dispose
实现或使用某种包装可能更容易.上述示例是否适合作为拦截器的候选者取决于您的应用程序的独特复杂性.这个列表当然不是详尽无遗的,也不是.拦截器的可能应用与您编写的应用程序一样多种多样.
我可以想到您可能想要应用拦截器的三个主要位置:控制器,服务和域对象.
关于如何完成所有这些的细节具体取决于您使用的工具.
拦截可用于许多事情 - 最值得注意的是解决横切问题,如仪表,记录,审计,安全,计量等.
您不需要DI容器来应用这个概念,但它有所帮助.
您可以使用ASP.NET MVC过滤器来实现大致相同的效果,但是当您可以应用通常可重用的实现时,为什么要将自己限制在MVC框架中?
我想说你使用更通用的 DI 容器来注入依赖项。这不仅将依赖项注入到您的控制器中,而且还提供这些依赖项的依赖项,从而生成所有依赖对象的完整对象图。
在前端使用 DI 容器也带来了很好的机会,使您的后端更具单元测试性和松散耦合性。
归档时间: |
|
查看次数: |
7643 次 |
最近记录: |