簡體   English   中英

.net MVC IdentityDbContext依賴項注入

[英].net MVC IdentityDbContext Dependency Injection

我正在使用模板化的Asp.Identity實現創建一個新的MVC 5項目。 我想做的就是利用我自己的域實體中現有的Asp.Identify實現。例如,一個Asp.Identity用戶可以是1個或多個Clubs的成員。 我希望能夠在我的MVC控制器中訪問用戶信息-例如,我希望能夠查看用戶是否屬於特定角色等。

基本上,我在一些我想澄清的問題上仍然有些困惑。

在Startup.Auth.cs中,添加了ApplicationUserManager及其關聯的實體框架DBContext。

app.CreatePerOwinContext(ApplicationDbContext.Create);
  1. 是否將這個Entity Framework DBContext添加到每個MVC Controller中-這是通過依賴項注入完成的嗎?

  2. 如果其注入了IOC-是否在每個HTTP請求上創建?

我通過向其添加自己的Domain實體來擴展現有的模板化ApplicationDbContext(如下所示)。 3.我可以在MVC Controillers中訪問所有這些內容嗎,又可以按要求進行訪問嗎?

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
  public ApplicationDbContext()
    : base("DefaultConnection", throwIfV1Schema: false)
  {
  }

  public static ApplicationDbContext Create()
  {
    return new ApplicationDbContext();
  }

//Add my own domain entities here...
  public virtual DbSet<Address> Address { get; set; }
  public virtual DbSet<Club> Clubs { get; set; }
}

要回答您的問題:

  1. 是的,這是為每個請求創建的。 方法名稱稱為CreatePerOwinContext()因此每次(在每個請求上)創建OwinContext時,它都將創建此ApplicationDbContext
  2. 不,這不是依賴注入本身。 這是Owin上下文,用於創建新上下文並將其保存在Owin Bootstrapper中,以用於請求的整個生命周期。 這以與許多依賴注入容器類似的方式工作,因為它控制對象的生存期,但是它本身不會進行注入,也不會將上下文本身注入到控制器或其他任何對象中。
  3. 是的,您可以使用Context.GetOwinContext().Get<ApplciationDbContext>()在控制器中訪問它們。 由於它返回了ApplicationDbContext,因此您可以執行與ApplicationDbContext一樣的任何操作。 因此,如果您對其進行擴展,那么這些擴展屬性也將可用。

如果要對帶有Owin的容器進行DI,則需要一個Owin知道的DependencyResolver。 大多數容器為它們的注射提供了一個。 例如,Ninject提供了Ninject.Web.Common.OwinHost nuget包,該包允許您使用app.UseNinjectMiddleware()配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM