首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将依赖项注入到具有inject的HttpModule中?

如何将依赖项注入到具有inject的HttpModule中?
EN

Stack Overflow用户
提问于 2011-07-11 16:24:05
回答 2查看 5.7K关注 0票数 9

我们正在我的公司运行一个webforms项目,我有一个需要解决依赖关系的HttpModule。

我们使用Ninject.Web库来解决母版页、页、用户控件、web服务和HttpHandlers的依赖关系。所有这些都有可以在Ninject.Web名称空间中继承的基类:

  • MasterPageBase
  • PageBase
  • WebServiceBase
  • HttpHandlerBase
  • 还有一个我们添加的定制的,因为有一些奇怪的原因,它不存在: UserControlBase

然而,我找不到一个HttpModuleBase。有一个NinjectHttpModule,但它不是一个基类,它是一个真正的模块,它试图消除从页面和用户控件中的基类继承的需要,但是它有一些bug,我们没有使用它。

在我的HttpModule中解决我的依赖关系的最好方法是什么?

当我搜索这个的时候,我在第一页上提出了这个问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-11 20:42:00

我有点惊讶,竟然一整天都没有人回答这个问题!看来我把你们绊倒了:)

我解决了这个问题。我自己编写了IHttpModule的自定义实现,并自己将其编译到Ninject.Web程序集中。下面是我添加的基类的来源:

代码语言:javascript
复制
namespace Ninject.Web
{
    public class HttpModuleBase : IHttpModule
    {
        /// <summary>
        /// This method is unused by the base class.
        /// </summary>
        public virtual void Dispose()
        {

        }

        /// <summary>
        /// Ininitialize the module and request injection.
        /// </summary>
        /// <param name="context"></param>
        public virtual void Init(HttpApplication context)
        {
            RequestActivation();
        }

        /// <summary>
        /// Asks the kernel to inject this instance.
        /// </summary>
        protected virtual void RequestActivation()
        {
            KernelContainer.Inject(this);
        }
    }
}

我只是根据Ninject.Web程序集中的其他基类对其进行建模。它似乎运作得很好。只要让您的HttpModule从Ninject.Web.HttpModuleBase继承,然后您就可以在模块中自由地使用属性注入,如下所示:

代码语言:javascript
复制
public class AppOfflineHttpModule : HttpModuleBase
{
    [Inject]
    public IUtilitiesController utilitiesController { get; set; }

    ...
}
票数 3
EN

Stack Overflow用户

发布于 2011-09-20 21:29:27

菲尔·哈克介绍了一种使使用构造函数注入成为可能的方法,从而避免了使您的HttpModule直接依赖Ninject。在标准NinjectHttpApplication中,执行以下操作:

第一步

使用Nuget查找HttpModuleMagic包并将其添加到您的web项目中。

第二步

编写HttpModule以使用构造函数注入:

代码语言:javascript
复制
public class MyHttpModule : IHttpModule
{
    public MyHttpModule(ISomeService someService) {...}
}

第三步

从web.config中删除http模块:

代码语言:javascript
复制
<httpModules>
    <!-- Modules will be defined via DI bindings -->
</httpModules>

第四步

设置绑定:

代码语言:javascript
复制
Bind<IHttpModule>().To<MyHttpModule>();
// Repeat the pattern above for any other modules.
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6653265

复制
相关文章

相似问题

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