Bir Genel Depo uygulamaya çalışıyorum. BuGenel bir RepositoryFactory nasıl uygulanır?
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;
}
}
RepositoryFactory Sormak istediğim soru ise,
public interface IUnitOfWork : IDisposable
{
IRepository<T> RepositoryOf<T>() where T : class;
void Commit();
}
Neyse iş uygulamasının benim birimi tarafından kullanılmaktadır ... Ben şimdiye kadar var ne RepositoryFactory uygulanmasını sahip olmadığını IWindsorContainer bağlıdır doğru mu?
Ben, herhangi türde bir IRepository soran bir yola ihtiyacımız benim yükleyici kod sadece belki o zaman bütün IoC tüm konseptine karşı gelmek gibi görünüyor, ama bu ...// Windsor Container
container.Register(
Component.For<IWindsorContainer>()
.Named("Container")
.Instance(container)
);
yapar böylece Bir depo sorma fikri bunu zaten yapar.
Düzenleme Ben
Zaten benim yükleyici aşağıdaki kodla benim için depolar oluşturmayı Windsor kullanıyorum...
// Generic Repository
container.Register(
Component.For(typeof (IRepository<>))
.ImplementedBy(typeof (EntityFrameworkRepository<>))
.ServiceOverrides(
ServiceOverride.ForKey("objectContext").Eq("ObjectContext"))
);
(miensol 'ın cevabı cevap olarak) İstediğim şeyi elde etmek için geçmişte ServiceLocator kullandı, ancak bunun bir anti-desen olduğunu biraz okudum. Bunu kullanmaktan kaçınmaya çalışıyordu. Her ne kadar emin değilim ki itiraf etmeliyim ki, yaptığım gibi ben de Castle Windsor'u IoC/DI framework'üm olarak kullanmak zorunda olduğum için yanlış görünüyor. Servis Belirleyici, çerçeve agnostiktir.
Biraz kafam karıştı!
Eklendi bu bir cevap, ama daha fazla bir yorum var - bunlar teğet yararlı olabilir (bugün erken saatlerde benzer bir soru cevap): [1]: http://stackoverflow.com/questions/3175/ yeniden pository-pattern-tutorial-in-c [2]: http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with-linq-to.htm –
Evet, birçok benzer soru var. Bence yaklaşık 3 tane cevap verdim .. – RPM1984
@Tim: Link # 2 bozuk. –