Как внедрить сервис с Ninjects в самодельный класс RoleProvider? - PullRequest
1 голос
/ 10 апреля 2011

При реализации Roleprovider для получения ролей из базы данных. Я продолжаю получать объект без экземпляра ... исключения.

Как оказалось, ninject не вводит мой сервис.

Я пытался поставить атрибут поверх объекта безуспешно. Я попытался добавить конструктор, но затем я получил желтый экран смерти, говорящий мне, что должен быть конструктор без параметров

Код

Public Class AnipRolProvider
    Inherits RoleProvider
'this service needs to get initialized
    Private _memberhip As IMemberschipService

    Sub New()
        'only this constructor is called by asp by default
    End Sub

    Sub New(memberschipservice As IMemberschipService)
        'this constructor should be called but how ?
        _memberhip = memberschipservice
    End Sub

единственный метод, который мне нужен

Public Overrides Function GetRolesForUser(username As String) As String()
        If String.IsNullOrEmpty(username) Then
            Throw New ArgumentException("username is nothing or empty.", "username")
        End If

        Return _memberhip.GetRolesForUser(username)

    End Function

Как мне реализовать нинъекты, чтобы поставщик ролей объединился с ниндзя?

Дополнительная информация:

<roleManager enabled="true" defaultProvider="AnipRoleProvider">
      <providers>
        <clear/>
        <add name="AnipRoleProvider" type="Anip.Core.AnipRolProvider"  />
      </providers>
    </roleManager>

в моем web.config есть ссылка на aniproleprovider.

offtopic-sidenote: при копировании этих фрагментов я должен научиться писать лучшие имена!

1 Ответ

3 голосов
/ 10 апреля 2011

Вы должны зарегистрировать свой IMembershipService в global.ascx, не знаете, как это сделать в VB, вставьте в c # это выглядит так:

kernel.Bind<IMembershipService>().To<MembershipService>().InRequestScope();

using System;
using System.Collections.Generic;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using Domain.Interfaces;
using Domain.Models;
using Domain.Storage;
using Domain.Services;
using Ninject;
using Ninject.Syntax;
using WebApp.Controllers;
using WebApp.Mailers;
using WebApp.ModelBinders;

namespace WebApp
{

    public class MvcApplication : NinjectHttpApplication
    {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

    protected override IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        kernel.Bind<ISession>().To<MongoSession>().InRequestScope();
        kernel.Bind<IAuthenticationService>().To<AuthenticationService>().InRequestScope();
        kernel.Bind<IMailer>().To<Mailer>().InRequestScope();
        kernel.Bind<IFileProvider>().To<MongoFileProvider>().InRequestScope();

        return kernel;
    }

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

}
...