我们正在做一些自定义身份验证,我正在制作一个自定义 HttpModule 来放入一些身份验证逻辑。由于 HttpModule 需要一个默认构造函数,因此我很难理解如何让依赖注入工作。我已经尝试过属性注入路由,但我得到 命名空间“System.ComponentModel”中不存在类型或命名空间名称“Composition”尝试在属性上使用 [Import] 属性时。我已经引用了 System.ComponentModel.Composition 并以完全相同的方式将 [Import] 属性用于不同的类(自定义属性),我不确定为什么它会为自定义 HttpModule 提供此消息。也许这无论如何都不是最好的解决方案(我仍然是 DI 菜鸟),所以我认为现在是刹车并寻求帮助的好时机。
我的问题是:如何使用 Simple Injector 正确地为自定义 HttpModule 进行依赖注入?
当前代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.Composition;
namespace CustomAuthMVC.App_Code
{
public class CustomHttpModule : IHttpModule
{
[Import]
public IAuthService AuthService { get; set; }
public void Application_AuthenticateRequest(object sender, EventArgs e) { }
public void Dispose() { }
public void Init(HttpApplication application)
{
application.AuthenticateRequest += this.Application_AuthenticateRequest;
}
}
我正在使用简单的注射器。该项目位于 .NET Framework 4.6.1、MVC 中。CustomHttpModule 位于 App_Code 目录中。AuthService 类型在 Global.asax 中注册为单例。它也用于应用程序中的其他地方,需要保持原样。