Inyecte una dependencia en un archivador de modelo personalizado y use InRequestScope con Ninject

Estoy usando NInject con NInject.Web.Mvc.

ara comenzar, he creado un proyecto de prueba simple en el que quiero una instancia deIPostRepository para compartir entre un controlador y un archivador de modelo personalizado durante la misma solicitud web. En mi proyecto real, necesito esto porque estoy obteniendoIEntityChangeTracker problemas donde efectivamente tengo dos repositorios accediendo al mismo gráfico de objeto. Entonces, para mantener mi proyecto de prueba simple, solo estoy tratando de compartir un repositorio ficticio.

El problema que tengo es que funciona en la primera solicitud y eso es todo. El código relevante está debajo.

NInjectModule:

public class PostRepositoryModule : NinjectModule
{
    public override void Load()
    {
        this.Bind<IPostRepository>().To<PostRepository>().InRequestScope();
    }
}

CustomModelBinder:

public class CustomModelBinder : DefaultModelBinder
{
    [Inject]
    public IPostRepository repository { get; set; }

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        repository.Add("Model binder...");

        return base.BindModel(controllerContext, bindingContext);
    }
}

public class HomeController : Controller
{
    private IPostRepository repository;

    public HomeController(IPostRepository repository)
    {
        this.repository = repository;
    }

    public ActionResult Index(string whatever)
    {
        repository.Add("Action...");

        return View(repository.GetList());
    }
}

Global.asax:

protected override void OnApplicationStarted()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    ModelBinders.Binders.Add(typeof(string), kernel.Get<CustomModelBinder>());
}

Hacerlo de esta manera en realidad está creando 2 instancias separadas deIPostRepository en lugar de la instancia compartida. Hay algo aquí que me falta con respecto a la inyección de una dependencia en mi carpeta modelo. Mi código anterior se basa en el primer método de configuración descrito en NInject.Web.Mvc wiki pero he probado los dos.

Cuando utilicé el segundo método,IPostRepository se compartiría solo para la primera solicitud web, después de lo cual sería predeterminado no compartir la instancia. Sin embargo, cuando conseguí que funcionara, estaba usando la @ predeterminaDependencyResolver como no pude por mi vida, descubro cómo hacer lo mismo con NInject (ya que el núcleo está escondido en la clase NInjectMVC3). Lo hice así:

ModelBinders.Binders.Add(typeof(string),
    DependencyResolver.Current.GetService<CustomModelBinder>());

Sospecho que la razón por la que esto funcionó la primera vez es porque esto no se resuelve a través de NInject, por lo que MVC realmente está manejando el ciclo de vida directamente (aunque eso significa que no tengo idea de cómo está resolviendo la dependencia).

Entonces, ¿cómo hago para registrar correctamente mi carpeta de modelo y hacer que NInject inyecte la dependencia?

Respuestas a la pregunta(6)

Su respuesta a la pregunta