Ninject UnitOfWork confusion

Uso Ninject todo el tiempo con mis aplicaciones MVC 3, pero estoy tratando de cambiar el Patrón para que mis Objetos de Datos usen UnitOfWork y tengo problemas para descubrir cómo hacer que Ninject maneje esto correctamente.

Sé que mi implementación de clases funciona cuando se construyen de forma manual en mi aplicación de consola:

<code>IDatabaseFactory factory = new DatabaseFactory();
IUnitOfWork worker = new UnitOfWork(factory);
IBlogCategoryDao dao = new BlogCategoryDao(factory);
IBlogCategoryService service = new BlogCategoryService(dao);

BlogCategory category = service.GetById(id);

try
{
    if (category != null)
    {
    service.Delete(category);
    worker.Commit();
    Console.WriteLine("Category deleted successfully!");
    }
    else
    {
    Console.WriteLine("Entity doesn't exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error deleting category: {0}", ex.Message);
}
</code>

En mi aplicación MVC 3 estoy usando el paquete Ninject.MVC3 NuGet, y esto está en el método RegisterServices.

<code>private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
    kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();

    kernel.Bind<IBlogCategoryDao>().To<BlogCategoryDao>();
    kernel.Bind<IBlogDao>().To<BlogDao>();

    kernel.Bind<IBlogCategoryService>().To<BlogCategoryService>();
    kernel.Bind<IBlogService>().To<BlogService>();
} 
</code>

Si bien esto funciona en su mayor parte, obtener solicitudes, no se ejecutan todas las solicitudes POST (Insertar, Actualizar, Eliminar). No se lanza ninguna excepción y cuando paso por ella, pasa por el método SaveChanges () sin problemas y vuelve a subir la pila, pero no se ejecuta nada. Entonces sé que debo estar perdiendo algo con mi configuración de Ninject.

Aquí está mi clase de Unidad de Trabajo.

<code>public class UnitOfWork : IUnitOfWork
{
    private Database _database;  <-- DbContext derived class

    private readonly IDatabaseFactory _databaseFactory;

    public UnitOfWork(IDatabaseFactory databaseFactory)
    {
        this._databaseFactory = databaseFactory;
    }

    public Database Database
    {
        get
        {
            return _database ?? (_database = _databaseFactory.Get());
        }
    }

    public void Commit()
    {
        Database.Commit();
    }
}
</code>

Aquí está la clase DatabaseFactory:

<code>public class DatabaseFactory : Disposable, IDatabaseFactory
{
    private Database _database;

    public DatabaseFactory()
    {

    }

    public virtual Database Get()
    {
        if (_database == null)
        {
            _database = DataObjectFactory.CreateContext();
        }

        return _database;
    }

    protected override void DisposeCore()
    {
        if (_database != null)
        {
            _database.Dispose();
        }
    }
}
</code>

Y mi clase DataObjectFactory:

<code>public static class DataObjectFactory
{
    private static readonly string _connectionString;

    /// <summary>
    /// Static constructor. Reads the connectionstring from web.config just once.
    /// </summary>
    static DataObjectFactory()
    {
        string connectionStringName = ConfigurationManager.AppSettings.Get("ConnectionStringName");
        _connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
    }

    /// <summary>
    /// Creates the Context using the current connectionstring.
    /// </summary>
    /// <remarks>
    /// Gof pattern: Factory method. 
    /// </remarks>
    /// <returns>Action Entities context.</returns>
    public static Database CreateContext()
    {
        return new Database(_connectionString);
    }
}
</code>

Este es un patrón similar al utilizado en la aplicación CodePlex de EFMVC, pero no uso AutoFac.

Cualquier pensamiento sobre esto es apreciado.

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta