1

我正在尝试在我的 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 不知道绑定。

4

0 回答 0