我们正在我的公司运行一个webforms项目,我有一个需要解决依赖关系的HttpModule。
我们使用Ninject.Web库来解决母版页、页、用户控件、web服务和HttpHandlers的依赖关系。所有这些都有可以在Ninject.Web名称空间中继承的基类:
然而,我找不到一个HttpModuleBase。有一个NinjectHttpModule,但它不是一个基类,它是一个真正的模块,它试图消除从页面和用户控件中的基类继承的需要,但是它有一些bug,我们没有使用它。
在我的HttpModule中解决我的依赖关系的最好方法是什么?
当我搜索这个的时候,我在第一页上提出了这个问题
发布于 2011-07-11 20:42:00
我有点惊讶,竟然一整天都没有人回答这个问题!看来我把你们绊倒了:)
我解决了这个问题。我自己编写了IHttpModule的自定义实现,并自己将其编译到Ninject.Web程序集中。下面是我添加的基类的来源:
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继承,然后您就可以在模块中自由地使用属性注入,如下所示:
public class AppOfflineHttpModule : HttpModuleBase
{
[Inject]
public IUtilitiesController utilitiesController { get; set; }
...
}发布于 2011-09-20 21:29:27
菲尔·哈克介绍了一种使使用构造函数注入成为可能的方法,从而避免了使您的HttpModule直接依赖Ninject。在标准NinjectHttpApplication中,执行以下操作:
第一步
使用Nuget查找HttpModuleMagic包并将其添加到您的web项目中。
第二步
编写HttpModule以使用构造函数注入:
public class MyHttpModule : IHttpModule
{
public MyHttpModule(ISomeService someService) {...}
}第三步
从web.config中删除http模块:
<httpModules>
<!-- Modules will be defined via DI bindings -->
</httpModules>第四步
设置绑定:
Bind<IHttpModule>().To<MyHttpModule>();
// Repeat the pattern above for any other modules.https://stackoverflow.com/questions/6653265
复制相似问题