.net MVC IdentityDbContext依赖注入

时间:2015-03-23 14:44:02

标签: c# .net asp.net-mvc dependency-injection asp.net-identity

我正在使用模板化的Asp.Identity实现创建一个新的MVC 5项目。我想要做的是在我自己的域实体中使用现有的Asp.Identify实现例如,Asp.Identity用户可以是1个或多个俱乐部的成员。我希望能够在我的MVC控制器中访问用户信息 - 例如,我希望能够看到用户是否属于特定角色等等。

基本上我仍然对一些我想澄清的问题感到困惑。

在Startup.Auth.cs中添加ApplicationUserManager及其关联的Entity框架DBContext。即。

app.CreatePerOwinContext(ApplicationDbContext.Create);
  1. 是否会将此Entity框架DBContext添加到每个MVC控制器中 - 这是通过依赖注入完成的吗?

  2. 如果它注入了IOC - 它是按照每个HTTP请求创建的吗?

  3. 我通过向其添加自己的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 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 是的,这是为每个请求创建的。方法名称称为CreatePerOwinContext(),因此每次创建ApplicationDbContext时(每次请求)都会创建此OwinContext
  2. 不,这不是依赖注入本身。这是Owin上下文创建一个新的上下文,并在请求的生命周期中将其保存在Owin Bootstrapper中。这与许多依赖注入容器的工作方式类似,它控制对象的生命周期,但这本身不会注入,也不会将上下文单独注入控制器或其他任何内容。
  3. 是的,您可以使用Context.GetOwinContext().Get<ApplciationDbContext>()在控制器中访问这些内容。由于它返回了ApplicationDbContext,因此您可以使用An ApplicationDbContext执行任何操作。因此,如果您扩展它,那么这些扩展属性也将可用。
  4. 如果你想用带Owin的容器做DI,你需要一个Owin知道的DependencyResolver。大多数容器提供一个用于注射。例如,Ninject提供了Ninject.Web.Common.OwinHost nuget包,它允许您使用app.UseNinjectMiddleware()配置