Primero, tengo una fábrica de dbcontext que se define como public class DatabaseFactory : Disposable, IDatabaseFactory
y simplemente crea un contexto si aún no existe.¿Cómo inyectar una única instancia de fábrica a múltiples repositorios y unidades de trabajo usando ninject?
A continuación, tengo un repositorio genérico que se define public class Repository<T> : IRepository<T> where T : class
que toma la fábrica en el constructor. Tengo otros repositorios concretos que heredan de este.
También tengo una unidad de clase de trabajo que se define public class UnitOfWork : IUnitOfWork
que toma la fábrica en el constructor y guarda todos los cambios en el contexto dentro de la fábrica (que todos los repositorios deberían estar usando).
En mi controlador, tengo el conjunto de constructores como public ProjectController(IDatabaseFactory factory, IUnitOfWork unitOfWork, IProjectRepository projectRep, IUserRepository userRep)
.
Básicamente, necesito la misma instancia de la fábrica para pasarla a la unidad de trabajo y a todos los repositorios. Con ninject, crea una nueva fábrica para cada objeto en lugar de pasarles una sola instancia a todos. ¿Hay alguna manera de permitir que solo la instancia se pase a través de ninject o no estoy creando mi fábrica correctamente y/o no estoy entendiendo ninject correctamente?
Éstos son mis fijaciones en ninject:
kernel.Bind<IProjectRepository>().To<ProjectRepository>();
kernel.Bind<IIssueRepository>().To<IssueRepository>();
kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
¿De verdad? Traté de buscar esa respuesta durante la última hora y media. Eso es exactamente lo que estaba buscando. No tengo idea de por qué fue tan difícil encontrar esa respuesta a través de google. Tal vez estaba tratando de hacerlo mucho más difícil de lo que era. ¡Gracias de nuevo! – snoluet
Si encontraste que mi publicación es útil, puedes aceptarla como respuesta :) – MonkeyCoder
Lo haré, lo respondiste muy rápido y ahora tengo que esperar 4 minutos :) Gracias. Pregunta rápida si tiene un segundo, si pongo la fábrica como singleton, ¿creará una aplicación de instancia única de ancho o solo dentro del controlador actual? Si quiero una instancia diferente de la fábrica para IssueController que ProjectController (pero una única instancia de ella dentro de ese controlador específico), ¿no me ocuparé de eso? – snoluet