如何将 DBContext 注入 HTTPModule
Posted
技术标签:
【中文标题】如何将 DBContext 注入 HTTPModule【英文标题】:How can I inject DBContext to HTTPModule 【发布时间】:2020-01-02 06:35:13 【问题描述】:我在创建使用 Entity Framework
的 httpmodule 时遇到了 DBContext
的问题。
我想将DBContext
注入httpmodule
,就像在constructor
中注入依赖一样。
有什么解决办法吗?
在MyHTTPModule
我想要的是将 dbcontext 注入到 httpmodule 中,例如:
公共类 MyHTTPModule:IHttpModule 私有 MyDBContext 数据库; 公共 MyHTTPModule(MyDBContext dbcontext) 分贝=分贝上下文; ... 公共无效 OnBeginRequest(对象发送者,EventArgs e) HttpApplication 应用程序 = (HttpApplication) 发送者; HttpContext 上下文 = Application.Context; 字符串文件路径= Context.Request.FilePath; var file = db.file.FirstOrDefault(r => r.filename == 文件路径); ...【问题讨论】:
***.com/questions/1657473/… 【参考方案1】:我使用Simple Injector 找到了解决此问题的简单方法。
安装了 3 个 NuGet 包。 (Microsoft.Web.Infrastructure, SimpleInjector, SimpleInjector.Integration.Web)
并为MyDBContext
创建接口
在Global.asax.cs
private static Container container;
public static Container Container
get return container ?? (container = RegisterAndVerifyContainer());
private static Container RegisterAndVerifyContainer()
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register<IDBContext, MyDBContext>(Lifestyle.Singleton);
container.Verify();
return container;
在MyDBContext
public partial class MyDBContext: DbContext, IDBContext
public MyDBContext() : base("name=MyDBContext")
protected override void OnModelCreating(DbModelBuilder modelBuilder)
throw new UnintentionalCodeFirstException();
public virtual DbSet<file> file get; set;
public interface IDBContext : IDisposable
DbSet<file> file get; set;
在MyHTTPModule
private IDBContext DBContext;
public MyHTTPModule()
DBContext = Global.Container.GetInstance<IDBContext>();
【讨论】:
以上是关于如何将 DBContext 注入 HTTPModule的主要内容,如果未能解决你的问题,请参考以下文章