Che*_*hev 9 c# asp.net dependency-injection webforms ninject
我们正在我的公司运行一个webforms项目,我有一个HttpModule,我需要解决它的依赖关系.
我们使用Ninject.Web库来解析母版页,页面,用户控件,Web服务和HttpHandler的依赖关系.所有这些都有可以在Ninject.Web命名空间中继承的基类:
但是我无法找到HttpModuleBase.有一个NinjectHttpModule,但它不是一个基类,它是一个真正的模块,试图消除从页面和用户控件中的基类继承的需要,但它有一些错误,我们没有使用它.
在HttpModule中解决依赖关系的最佳方法是什么?
当我谷歌这个我在第一页提出这个问题-_-
Str*_*ior 12
Phil Haack在博客中介绍了一种方法,可以使用构造函数注入,从而避免让HttpModule直接依赖于Ninject.在标准中NinjectHttpApplication,执行以下操作:
使用Nuget查找并将HttpModuleMagic包添加到您的Web项目中.
写你HttpModule的使用构造函数注入:
public class MyHttpModule : IHttpModule
{
public MyHttpModule(ISomeService someService) {...}
}
Run Code Online (Sandbox Code Playgroud)
从web.config中删除 http模块:
<httpModules>
<!-- Modules will be defined via DI bindings -->
</httpModules>
Run Code Online (Sandbox Code Playgroud)
设置绑定:
Bind<IHttpModule>().To<MyHttpModule>();
// Repeat the pattern above for any other modules.
Run Code Online (Sandbox Code Playgroud)
我有点惊讶一整天都没有人回答这个问题!看来我难倒了你们:)
嗯,我解决了这个问题。我自己编写了自己的自定义实现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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只是根据 Ninject.Web 程序集中的其他基类对其进行建模。它似乎工作得很好。只需让您的 HttpModule 继承Ninject.Web.HttpModuleBase,然后您就可以在模块中自由使用属性注入,如下所示:
public class AppOfflineHttpModule : HttpModuleBase
{
[Inject]
public IUtilitiesController utilitiesController { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5240 次 |
| 最近记录: |