【问题标题】:How to inject IUserRepository into custom membership provider using Ninject?如何使用 Ninject 将 IUserRepository 注入自定义成员资格提供程序?
【发布时间】:2012-06-07 15:20:40
【问题描述】:

我在我的项目中使用 Ninject 设置了 DI。这是 UserController 的示例。

private readonly IRoleRepository roleRepository;
private readonly IUserRepository userRepository;

public UserController(IUserRepository userRepository, IRoleRepository roleRepository)
{
    this.roleRepository = roleRepository;
    this.userRepository = userRepository;
}

在我的 NinjectWebCommon.cs 文件中,我有这个:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IControllerFactory>().To<DefaultControllerFactory>();
    kernel.Bind<IUnitOfWork>().To<PortalContext>().InSingletonScope();
    kernel.Bind<IUserRepository>().To<UserRepository>();
    kernel.Bind<IRoleRepository>().To<RoleRepositoroy>();
}    

但是,我似乎不知道如何将用户和角色存储库注入自定义成员资格提供程序。非常感谢任何帮助,因为我在这里碰壁了。我将 Asp.net MVC4 和 EF4 与存储库和工作单元模式一起使用。谢谢。

【问题讨论】:

标签: asp.net-mvc entity-framework repository-pattern unit-of-work custom-membershipprovider


【解决方案1】:

作为一个简单的解决方案,您可以使用 Ninject 对其进行属性注入。

[Inject]
public IUserRepository UserRepository {get;set;}

【讨论】:

  • 当我这样做时,我的 UserRepository 总是为空?
  • @BBauer42 很抱歉,如果没有看到您的代码是什么,这对我来说很难说。您是否使用公共属性将无法正常工作。
  • @BBauer42 奇怪。是您的 MVC 应用程序的另一个项目中的提供程序吗?
  • 我将这两行添加到注册服务方法中:kernel.Inject(Membership.Provider); kernel.Inject(Roles.Provider); ...然后我再次运行并收到错误“在应用程序的预启动初始化阶段无法调用此方法。” ..查看此线程后,我尝试将两个键添加到 Web 配置中,但没有解决问题:stackoverflow.com/questions/4626647/…
  • 我能够在成员的构造函数中使用 DependencyResolver.Current.GetService() 来做到这一点
【解决方案2】:

你可以使用属性注入

[Inject]
public IUserRepository userRepository {get;set;};

但您必须小心 DBContext 的范围,因为 MembershipProvider 类是一个单例,其范围是应用程序的生命周期。

【讨论】:

  • 当我这样做时,我的 UserRepository 始终为空。我没有在 MyMembershipProvider 中创建构造函数。我在 RegisterServices 中也没有与会员提供者相关的任何内容。
【解决方案3】:

@feanz,关于你的问题:

@BBauer42 奇怪。您的 MVC 应用程序是另一个项目中的提供者吗?

如果自定义提供程序位于单独的项目(类库)中,您需要做些什么不同的事情?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多