2012-04-07 83 views
3

任何人都知道如何配置Membership.Provider在RegisterServices的ninject初始化代码?Ninject,注入Membership.Provider注册服务的ninject初始化

在我的代码:

/// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 
     // Put additional bindings here 
     kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>(); 
     kernel.Bind<IUnitOfWork>().To<UnitOfWork>(); 
     kernel.Bind<IUserRepository>().To<UserRepository>(); 
     kernel.Bind<IRoleRepository>().To<RoleRepository>(); 
     kernel.Bind<ISecurityService>().To<SecurityService>(); 
     kernel.Inject(Membership.Provider); 
     kernel.Inject(Roles.Provider); 
    } 

所有的模块都与kernel.Inject线除外绑定。我收到错误消息:“在应用程序的预启动初始化阶段不能调用此方法”。

该文件是标准nuget ninject.mvc安装的NinjectWebCommon。 我试图创建一个自定义成员资格提供程序并在提供程序中注入服务层(SecurityService)。

任何帮助?

+1

虽然这是从你的问题有点切线,这个博客帖子(http://blog.ploeh.dk/2011/04/27/ProviderIsNotAPattern.aspx)从Mark Seemann(和评论)对提供者和依赖注入进行了一些有趣的讨论。 – ngm 2012-04-07 10:43:16

+0

这是一个重复的,这里有一个更好的答案:http://stackoverflow.com/questions/14412279/how-to-configure-ninject-for-mvc4-custom-membership-provide – 2013-05-01 22:59:12

回答

2

我用这个相同的问题撞到了我的头,我终于找到了一个相对干净的解决方案here

的基本方法是:

  1. 使用[Inject]在您的自定义成员资格提供一流的任何依赖属性的属性。

  2. 创建一个http模块来立即解析/注入您的提供者(Ninject 3支持注入HttpModules)。

  3. RegisterServices()方法中的最后2个inject声明替换为提供程序和新HttpModule的绑定。

    kernel.Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider); kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();

+0

这适用于自定义MemberShipProvider,但任何想法如果使用Custom RoleProvider作为自定义RoleProvider中的依赖项,那么如果我采用所提及的路由,则不会获得注入。 – Vipresh 2014-05-15 10:09:26