Max*_*lov 5 inversion-of-control webactivator asp.net-mvc-3
我有几个WebActivator.PreApplicationStartMethod修饰类.
一个用于Ninject,另一个用于AwesomeMVC,第三个用于后台任务调度程序.
问题是调度程序类需要利用由IoC容器解决的依赖性.
我的问题是:
Ric*_*ett 16
是的,您可以拥有任意数量的类,这些类具有WebActivator.PreApplicationStartMethod指向它们的程序集属性.许多NuGet包使用这种技术使它们能够在不编辑Global.asax的情况下引导到您的应用程序中.
您也可以定义订单.您可以Order在PreApplicationStartMethod调用中传递命名参数.WebActivator框架将确保按指定的顺序调用方法.例如,要首先使您的IoC框架注册,请执行以下操作:
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.App_Start.NinjectWebCommon), "Start", Order=1]
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.App_Start.BGScheduler), "Start", Order=2]
Run Code Online (Sandbox Code Playgroud)
因为WebActivator类是静态类,所以我看不到如何在其中使用构造函数注入.但是,您可以使用服务定位器(反?) - 模式,将IoC解析器注册为Mvc的默认服务定位器System.Web.Mvc.DependencyResolver.SetResolver(IDependencyResolver resolver).
我不是特别想在这里讨论服务定位器模式的优点和缺点!
如果您知道 PreAppStart 方法 A 需要在 PreAppStart 方法 B 之后运行,那么实现这一点的唯一方法是在 A 的主体内显式添加对 B 的调用。
为了使该策略正常工作,您还应该确保您的 PreAppStart 方法实现是独立的,即它们可以安全地被多次调用。通常,这可以通过跟踪该方法是否已在静态布尔变量中调用并且如果该值为 true 则不执行任何操作来实现。
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |