我正在使用模板化的Asp.Identity实现创建一个新的MVC 5项目。我想要做的是在我自己的域实体中使用现有的Asp.Identify实现例如,Asp.Identity用户可以是1个或多个俱乐部的成员。我希望能够在我的MVC控制器中访问用户信息 - 例如,我希望能够看到用户是否属于特定角色等等。
基本上我仍然对一些我想澄清的问题感到困惑。
在Startup.Auth.cs中添加ApplicationUserManager及其关联的Entity框架DBContext。即。
app.CreatePerOwinContext(ApplicationDbContext.Create);
是否会将此Entity框架DBContext添加到每个MVC控制器中 - 这是通过依赖注入完成的吗?
如果它注入了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; }
}
答案 0 :(得分:1)
回答你的问题:
CreatePerOwinContext()
,因此每次创建ApplicationDbContext
时(每次请求)都会创建此OwinContext
。Context.GetOwinContext().Get<ApplciationDbContext>()
在控制器中访问这些内容。由于它返回了ApplicationDbContext,因此您可以使用An ApplicationDbContext执行任何操作。因此,如果您扩展它,那么这些扩展属性也将可用。如果你想用带Owin的容器做DI,你需要一个Owin知道的DependencyResolver。大多数容器提供一个用于注射。例如,Ninject提供了Ninject.Web.Common.OwinHost nuget包,它允许您使用app.UseNinjectMiddleware()
配置