首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义WebActivator.PreApplicationStartMethod类的初始化顺序

定义WebActivator.PreApplicationStartMethod类的初始化顺序
EN

Stack Overflow用户
提问于 2012-01-27 23:42:47
回答 2查看 2.8K关注 0票数 6

我有几个WebActivator.PreApplicationStartMethod装饰的课程。

一个是Ninject,另一个是AwesomeMVC的类,第三个是后台任务调度器。

问题是调度程序类需要利用由IoC容器解决的依赖关系。

我的问题是:

  1. 可以有几个WebActivator.PreApplicationStartMethod类吗?
  2. 可以定义它们初始化的顺序,这样IoC才是最重要的,所以
  3. 静态类实例可以依赖IoC容器来解决它们的构造函数定义的依赖关系吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-28 00:03:50

如果您知道PreAppStart方法A需要在PreAppStart方法B之后运行,那么唯一的实现方法就是在A的主体中显式地添加对B的调用。

要使该策略正确工作,还应确保您的PreAppStart方法实现是可靠的,即可以安全地多次调用它们。通常,这可以通过跟踪方法是否已经在静态布尔变量中调用来实现,如果vale为真,则不执行任何操作。

票数 1
EN

Stack Overflow用户

发布于 2012-09-25 20:10:51

是的,您可以拥有任意数量的类,这些类具有指向它们的WebActivator.PreApplicationStartMethod程序集属性。许多NuGet包使用这种技术使它们能够在不编辑Global.asax的情况下引导应用程序。

你也可以定义顺序。您可以在Order调用中传递一个命名参数PreApplicationStartMethod。WebActivator框架将确保按指定的顺序调用这些方法。例如,要首先注册IoC框架,请执行以下操作:

代码语言:javascript
复制
[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)

不过,我并不特别想在这里讨论服务定位器模式的优缺点!

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9041558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档