Передача параметра в сопряженный класс в ninject - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть класс для проведения подобной сессии

public class SessionService : ISession
{
    public HttpContext Context { get; set; }

    public SessionService(HttpContext context)
    {
        this.Context = context;
    }
}

Я хочу иметь возможность вставлять объект сеанса в различные места в моем приложении MVC3. У меня есть этот интерфейс

interface ISession
{
    HttpContext Context { get; set; }
}

Я использую ninject для привязки класса сеанса к интерфейсу, как это

private void RegisterDependencyResolver()
{
    var kernel = new StandardKernel();
    kernel.Bind<ISession>().To<SessionService>();
    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}

Моя проблема заключается в том, как передать параметр Httpcontext в конструктор SessionService.

Любые указатели наиболее ценные.

Спасибо

1 Ответ

2 голосов
/ 01 декабря 2011

Где бы вы ни настраивали свои зависимости:

kernel.Bind<HttpContext>().ToMethod(c => HttpContext.Current);

У меня есть класс начальной загрузки, который делает это с помощью метода RegisterServices:

public static class NinjectMVC3
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
        DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {            
        kernel.Bind<HttpContext>().ToMethod(c => HttpContext.Current);
    }
}
...