Estoy tratando de implementar un Repositorio genérico. Esto es lo que tengo hasta ahora ...¿Cómo implementar un RepositoryFactory genérico?
public interface IRepositoryFactory
{
IRepository<T> RepositoryOf<T>() where T : class;
}
public class EntityFrameworkRepositoryFactory : IRepositoryFactory
{
private readonly IWindsorContainer _container;
public EntityFrameworkRepositoryFactory(IWindsorContainer container)
{
_container = container;
}
public IRepository<T> RepositoryOf<T>() where T : class
{
var repository = _container.Resolve<IRepository<T>>();
return repository;
}
}
El RepositoryFactory es utilizado por mi unidad de ejecución de los trabajos
public interface IUnitOfWork : IDisposable
{
IRepository<T> RepositoryOf<T>() where T : class;
void Commit();
}
De todos modos, la cuestión que quiero preguntarle es si tiene la aplicación RepositoryFactory Depende de IWindsorContainer es correcto?
necesitaba una manera de pedir un IRepository de cualquier tipo, por lo que mi código de instalador hace esto ...
// Windsor Container
container.Register(
Component.For<IWindsorContainer>()
.Named("Container")
.Instance(container)
);
Lo cual parece ir en contra de todo el concepto de la COI, pero entonces tal vez el conjunto la idea de pedir un repositorio lo hace de todos modos.
Editar (Como respuesta a miensol 's respuesta)
ya estoy usando Windsor para crear los repositorios para mí con el código siguiente en mi instalador ...
// Generic Repository
container.Register(
Component.For(typeof (IRepository<>))
.ImplementedBy(typeof (EntityFrameworkRepository<>))
.ServiceOverrides(
ServiceOverride.ForKey("objectContext").Eq("ObjectContext"))
);
tengo Usé ServiceLocator en el pasado para lograr lo que quería, pero he leído que es un poco antipatrón. Entonces estaba tratando de evitar usarlo. Aunque tengo que admitir que no estoy seguro de por qué, ya que lo que hice también parece incorrecto, ya que estoy obligado a usar Castle Windsor como mi framework de IoC/DI. Service Locator está destinado a ser agnóstico de framework.
lo tanto, estoy un poco confundido!
añadió esta es una respuesta, pero es más bien un comentario - tangencialmente estos podrían ser útiles (respondido a una pregunta similar el día de hoy): [1]: http://stackoverflow.com/questions/3175/ re pository-patrón-tutorial-en-c [2]: http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with-linq-to.htm –
Sí hay un montón de preguntas similares. Creo que he respondido sobre 3 de ellos .. – RPM1984
@Tim: El enlace # 2 está roto. –