Ich versuche ein generisches Repository zu implementieren. Das ist, was ich so weit gekommen ...Wie implementiert man eine generische RepositoryFactory?
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;
}
}
Die RepositoryFactory von meiner Arbeitseinheit Implementierung verwendet wird
public interface IUnitOfWork : IDisposable
{
IRepository<T> RepositoryOf<T>() where T : class;
void Commit();
}
Wie dem auch sei, die Frage, die ich stellen möchte, ist, ob die RepositoryFactory Umsetzung mit abhängig von IWindsorContainer ist richtig?
brauchte ich einen Weg für eine IRepository jeglicher Art zu fragen, so dass mein Installateur Code tut dies ...
// Windsor Container
container.Register(
Component.For<IWindsorContainer>()
.Named("Container")
.Instance(container)
);
Welche scheint nur gegen das gesamte Konzept der IoC zu gehen, aber dann vielleicht die ganze Idee, nach einem Repository zu fragen, macht das trotzdem.
Edit (Als Antwort auf miensol ‚s Antwort)
ich bereits Windsor bin mit dem Endlager für mich mit dem folgenden Code in meinem Installateur erstellen ...
// Generic Repository
container.Register(
Component.For(typeof (IRepository<>))
.ImplementedBy(typeof (EntityFrameworkRepository<>))
.ServiceOverrides(
ServiceOverride.ForKey("objectContext").Eq("ObjectContext"))
);
Ich habe benutze ServiceLocator in der Vergangenheit, um zu erreichen, was ich will, aber gelesen habe, dass es ein bisschen ein Anti-Muster ist. Also versuchte ich es zu vermeiden. Obwohl ich zugeben muss, dass ich mir nicht sicher bin, warum, scheint das, was ich getan habe, auch falsch zu sein, da ich Castle Windsor als mein IoC/DI-Framework verwenden muss. Service Locator soll rahmenunabhängig sein.
Also, ich bin ein bisschen verwirrt!
hat dieses Bild eine Antwort, aber es ist eher ein Kommentar - diese tangential nützlich sein könnten (beantwortet eine ähnliche Frage bereits heute): [1]: http://stackoverflow.com/questions/3175/ Re pository-pattern-tutorial-in-c [2]: http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-mit-linq-to.htm –
Ja, es gibt viele ähnliche Fragen. Ich denke, ich habe über 3 von ihnen beantwortet .. – RPM1984
@Tim: Link # 2 ist kaputt. –