MVC3 CustomRoleProvider依赖注入问题

时间:2012-07-12 17:23:43

标签: asp.net-mvc-3 ninject

我正在尝试在我的MVC3项目中创建自定义RoleProvider。我的RoleProvider定义如下:

public class MyRoleProvider : System.Web.Security.RoleProvider
{
    private IAccountService _accountService;

    public MyRoleProvider()
    {
        _accountService = DependencyResolver.Current.GetService<IAccountService>();
    }

    //...
}

正如您所看到的,我正在尝试使用DependencyResolver来获取绑定服务。我的绑定在我的App_Start中完成:

private static IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
    kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

    RegisterServices(kernel);
    return kernel;
}

private static void RegisterServices(IKernel kernel)
{
    // Add data and infrastructure modules
    var modules = new List<INinjectModule>
    {
        new ConfigModule(),
        new LoggingModule(),
        new RepositoryModule(),
        new ServiceModule()
    };
    kernel.Load(modules);
}  

ServiceModule是我在做实际绑定的地方:

public class ServiceModule : NinjectModule
{
    public override void Load()
    {
        Kernel.Bind<ICoreService>().To<CoreService>();
        Kernel.Bind<IAccountService>().To<AccountService>();
    }
}

我的问题是,当我调试网站时,我收到配置错误:

配置错误

描述:处理为此请求提供服务所需的配置文件时发生错误。请查看下面的具体错误详细信息并相应地修改配置文件。

分析器错误消息:调用目标已抛出异常。

来源错误:

Line 45:     <roleManager>
Line 46:       <providers>
Line 47:         <clear />
Line 48:         <add name="MyRoleProvider" type="Project.Web.Ui.Helpers.MyRoleProvider, Project.Web.Ui" connectionStringName="MyConnection" />
Line 49:       </providers>
Line 50:     </roleManager>

如果我在我的角色提供者构造函数上放置一个断点:

  

_accountService = DependencyResolver.Current.GetService();

我在App_Start Dependency Injector上放置一个断点:

  

var kernel = new StandardKernel();

_accountService断点首先命中,但如果我尝试跳过或介入,它就会爆炸。有关我可能做错了什么的想法,或者有任何关于找出更深入挖掘方法的想法?

编辑:我假设原因是因为我的Dependency Injector没有将我的服务绑定到接口而且DependencyResolver不知道绑定。

1 个答案:

答案 0 :(得分:1)

我最终改变了解决这个问题的方式。我按照这个link进行了调查。