我有几个WebActivator.PreApplicationStartMethod装饰的课程。
一个是Ninject,另一个是AwesomeMVC的类,第三个是后台任务调度器。
问题是调度程序类需要利用由IoC容器解决的依赖关系。
我的问题是:
发布于 2012-01-28 00:03:50
如果您知道PreAppStart方法A需要在PreAppStart方法B之后运行,那么唯一的实现方法就是在A的主体中显式地添加对B的调用。
要使该策略正确工作,还应确保您的PreAppStart方法实现是可靠的,即可以安全地多次调用它们。通常,这可以通过跟踪方法是否已经在静态布尔变量中调用来实现,如果vale为真,则不执行任何操作。
发布于 2012-09-25 20:10:51
是的,您可以拥有任意数量的类,这些类具有指向它们的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]因为WebActivator类是静态类,所以我不知道如何在它们中使用构造函数注入。但是,您可以通过使用-pattern将您的IoC解析器注册为Mvc的默认服务定位器,从而使用服务定位器(Anti-?) System.Web.Mvc.DependencyResolver.SetResolver(IDependencyResolver resolver)。
不过,我并不特别想在这里讨论服务定位器模式的优缺点!
https://stackoverflow.com/questions/9041558
复制相似问题