【问题标题】:DotNetNuke Module Development - IoC with StructureMapDotNetNuke 模块开发 - 使用 StructureMap 的 IoC
【发布时间】:2013-01-29 17:09:35
【问题描述】:

我是 DotNetNuke 模块开发的新手,但相当精通 StructureMap 作为 IoC 容器以及 IoC 和依赖注入的概念。

我在这里关注 DNN 模块教程视频 - http://www.dotnetnuke.com/Resources/Video-Library.aspx - 但我不太清楚我将在哪里进行 StructureMap 初始化。

在 DNN 模块开发的框架内,我该在哪里做呢?

【问题讨论】:

    标签: dependency-injection dotnetnuke structuremap dotnetnuke-module


    【解决方案1】:

    没有像 DotNetNuke 那样进行一次性初始化的好地方。 DNN 没有给Application_Start 事件一个干净的钩子。

    我们采用的一种方法是实现一个 HttpModule 来进行初始化,并使用锁来确保它只发生一次。 Ian Robinson 在他的 Beer Collection MVP 示例模块中有 an example of that,但似乎有 torn it out somewhat。这种方法的一个问题是它需要通过管道请求来设置所有内容。我们已经看到计划任务(不在请求的上下文中运行)能够在没有此初始化的情况下启动,然后因为没有任何依赖关系而崩溃。

    【讨论】:

    • 在 PortalModuleBase 的 OnInit 方法中这样做会起作用吗?
    • PortalModuleBase 是指您自己的继承自它的类(即避免修改 DNN 核心代码)?是的,我认为这应该可以,只要你记住它对于任何不是模块控件的东西(例如额外的 aspx 页面、http 模块/处理程序、提供程序等)。
    • 是的,覆盖 OnInit 即: public class MyModuleBase : DotNetNuke.Entities.Modules.PortalModuleBase { protected override void OnInit(System.EventArgs e) { base.OnInit(e); var registry = new MyModuleRegistry(); ObjectFactory.Initialize(c => c.AddRegistry(registry)); ObjectFactory.AssertConfigurationIsValid(); } }
    • 不确定多次初始化是否有问题;您可能希望将其包装在 lock 中以确保它只发生一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多