如何将MVC 5 IdentityModels.cs移动到单独的程序集中

时间:2013-12-12 05:13:56

标签: asp.net-mvc authentication identity asp.net-mvc-5

我想知道是否有人遇到了我试图将ApplicationUser移动到Models项目中的问题(所有其他模型都驻留在其中,包括与Users表相关的模型)。

我的测试MVC 5解决方案由一个Web项目和两个类库组成:一个用于数据访问层(DAL),另一个用于模型。我在所有三个项目中都引用了AspNet.Identity.EntityFramework。 在我的DAL类中,我实现了Repository模式和UnitOfWork。 UnitOfWork扩展IdentityDbContext<ApplicationUser>。 ApplicationUser:IdentityUser位于Models类库中。

在我的Web项目中,UnitOfWork使用Autofac DI进行实例化。 对于常规控制器,我定义了一个继承自Controller的基类,并将IUnitOfWork作为构造函数中的参数。所有控制器都从我的自定义基本控制器继承。 我遇到了AccountController的问题。它有两个构造函数:一个没有参数,似乎实例化ApplicationDbContext,另一个将UserManager作为参数。

无参数构造函数给了我最大的悲痛。我尝试了很多东西:make accountcontroller继承自我的自定义基本控制器,然后尝试从Controller类继承它。充其量我成功地使我的解决方案编译,但当我测试应用程序并填写用户注册表单时,我得到'对象未实例化'消息。当我调试时,我看到AccountController中的第二个构造函数被调用,但UserManager在那里为空。

有什么想法吗?我真的很感激有人对此的聪明投入。

1 个答案:

答案 0 :(得分:6)

看看SimpleSecurity Project。此项目将ASP.NET标识与Web应用程序分离,并放置ApplicationUser into an assembly separate from the web application。该项目还有一个使用SimpleMembership的版本。对于ASP.NET Identity,请查看AspNetIdentity文件夹。安全功能的程序集位于AspNetIdentity / SimpleSecurity.AspNetIdentity中,参考Web应用程序位于AspNetIdentity / SimpleSecurity.AspNetIdentity / RefApp中。