public interface IRepository<T> where T : Entity
{
void Delete(T entity);
T[] GetAll();
T GetById(int id);
void SaveOrUpdate(T enity);
void Merge(T entity);
}
public interface ITeamEmployeeRepository : IRepository<TeamEmployee>
{
PagedList<TeamEmployee> GetPagedTeamEmployees(int pageIndex, int pageSize);
}
public class Repository<T> : IRepository<T> where T : Entity
{
private readonly ISession _session;
protected Repository()
{
_session = GetSession();
}
public virtual void Delete(T entity)
{
_session.Delete(entity);
}
public virtual T[] GetAll()
{
return _session.CreateCriteria<T>().List<T>().ToArray();
}
public virtual T GetById(int id)
{
return _session.Get<T>(id);
}
public virtual void SaveOrUpdate(T enity)
{
_session.SaveOrUpdate(enity);
}
public void Merge(T entity)
{
_session.Merge(entity);
}
protected ISession GetSession()
{
return new SessionBuilder().GetSession();
}
}
public class TeamEmployeeRepository : Repository<TeamEmployee>, ITeamEmployeeRepository
{
public PagedList<TeamEmployee> GetPagedTeamEmployees(int pageIndex, int pageSize)
{
return GetSession().QueryOver<TeamEmployee>()
.Fetch(x => x.Employee).Eager
.Fetch(x => x.Team).Eager
.ToPagedList(pageIndex, pageSize);
}
}
kayıt ve çözmek için nasıl şimdi depo kayıt olun.StructureMap şöyle İçin açık genel tür
bir daha kolay ve daha iyi kayıt olacaktır:
For(typeof(IRepository<>)).Use(typeof(Repository<>));
Ancak bu işe yaramaz. StructureMap her zaman PluginFamily Core.Domain.Bases.Repositories.ITeamEmployeeRepository için tanımlanmış varsayılan bir örnek olmadığını söylüyor.
ben stackoverflow arandı ve yeni bir şey buldum:Scan(x =>
{
x.AssemblyContainingType(typeof(TeamEmployeeRepository));
x.AddAllTypesOf(typeof (IRepository<>));
x.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
Ama yine aynı hata mesajı.
Depolarımı StructureMap 2.6.1.0 ile nasıl kaydettirmeliyim?
Bu, doğrudan sorunuzu yanıtlamamakla birlikte, lütfen şu makaleye göz atın: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories-using -ioc/41 32186 # 4132186. Havuz kalıbının uygulanmasının alternatif bir yolunu gösterir. Uygulama, depolarınızı bir iş biriminin arkasına saklar ve sadece bir “IUnitOfWorkFactory” kaydını yapmanız gerekir ve işiniz biter. – Steven