asp.net-mvc – 带有存储库和ninject的ASP.NET MVC MembershipPr
发布时间:2020-12-16 04:22:11 所属栏目:asp.Net 来源:网络整理
导读:如何通过覆盖的MembershipProvider类与UserService进行通信?我不知道如何将连接字符串传递给服务中的用户存储库. 这就是我的应用程序的结构: 存储库(实现中的构造函数采用连接字符串) public interface IUserRepository{ IQueryableUser GetUsers(); IQuer
如何通过覆盖的MembershipProvider类与UserService进行通信?我不知道如何将连接字符串传递给服务中的用户存储库.
这就是我的应用程序的结构: 存储库(实现中的构造函数采用连接字符串) public interface IUserRepository { IQueryable<User> GetUsers(); IQueryable<UserRole> GetUserRoles(); void InsertUser(User user); } 服务(构造函数获取用户存储库) public interface IUserService { User GetUser(int userId); User GetUser(string email); } UserController(我的控制器的一个例子) public class UsersController : Controller { private IUserService userService; public UsersController(IUserService userServ) { userService = userServ; } } NinjectConfigurationModule public class NinjectConfigurationModule : NinjectModule { public override void Load() { Bind<IUserService>().To<UserService>(); Bind<IUserRepository>().To<UserRepository>() .WithConstructorArgument("connectionString",ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString ); } } NinjectControllerFactory public class NinjectControllerFactory : DefaultControllerFactory { private IKernel kernel = new StandardKernel(new NinjectConfigurationModule()); protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext,Type controllerType) { // We don't want to pass null to ninject as we'll get a strange error. return controllerType == null ? null : (IController)kernel.Get(controllerType); } } MembershipProvider(这是我的问题所在) public class SimpleMembershipProvider : MembershipProvider { //How do I set up User Service here so that ninject can put my connection string here. public override bool ValidateUser(string username,string password) { //Code to use user service. } } 解决方法
已经回答了问题,但我认为更好的答案是将存储库作为MembershipProvider的属性并在Application_Start中注入它.例如
public class AccountMembershipProvider : MembershipProvider { [Inject] public IAccountRepository AccountRepository { get; set; } ... } 和注射: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); // Inject account repository into our custom membership & role providers. _kernel.Inject(Membership.Provider); // Register the Object Id binder. ModelBinders.Binders.Add(typeof(ObjectId),new ObjectIdModelBinder()); } 我在这里写了一个更深入的解释: http://www.danharman.net/2011/06/23/asp-net-mvc-3-custom-membership-provider-with-repository-injection/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – ASP.Net MVC隐藏/显示基于安全性的菜单项
- asp.net-mvc – 使用ASP.NET MVC 2上传文件的最佳方法是什么
- asp.net-mvc – MVC6自托管wwwroot内容返回404,IIS Express
- asp.net – 如何使用ajax调用跨域web api?
- ASP.NET sessionState SQLServer模式超时不起作用
- asp.net-mvc – 传递的JSON集合未被控制器拾取
- asp.net – 使用Microsoft Access和VB.NET进行SQL注入预防
- 【Asp.Net MVC+EF+三层架构】详解(一)初见
- IIS和ASP.NET中的时间差异
- 如何在ASP.NET MVC网站中为cookie设置“安全”标志?