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);
}
}
Để bây giờ tôi đăng ký kho như sau:StructureMap - Làm thế nào để đăng ký và giải quyết một mở generic loại
For<ILoanedItemRepository>().Use<LoanedItemRepository>();
For<ITeamEmployeeRepository>().Use<TeamEmployeeRepository>();
For<IArticleRepository>().Use<ArticleRepository>();
For<ISalesmanRepository>().Use<SalesmanRepository>();
For<ISalesmanArticleRepository>().Use<SalesmanArticleRepository>();
For<IGoodsGroupRepository>().Use<GoodsGroupRepository>();
For<IEmployeeRepository>().Use<EmployeeRepository>();
Điều này thực sự cồng kềnh, đặc biệt là nếu có đi kèm cùng kho mới.
Một đăng ký dễ dàng hơn và tốt hơn sẽ là:
For(typeof(IRepository<>)).Use(typeof(Repository<>));
Nhưng điều này không làm việc. StructureMap là mọi lúc nói với tôi rằng không có Instance mặc định nào được định nghĩa cho PluginFamily Core.Domain.Bases.Repositories.ITeamEmployeeRepository.
tôi đã tìm kiếm trên stackoverflow và tìm thấy những điều mới mẻ:
Scan(x =>
{
x.AssemblyContainingType(typeof(TeamEmployeeRepository));
x.AddAllTypesOf(typeof (IRepository<>));
x.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
Nhưng vẫn được thông báo lỗi tương tự.
Làm cách nào để đăng ký kho lưu trữ của tôi với StructureMap 2.6.1.0?
Mặc dù điều này không trực tiếp trả lời câu hỏi của bạn, vui lòng xem bài viết này: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories-using -ioc/41 32186 # 4132186. Nó cho thấy một cách khác để thực hiện mẫu kho lưu trữ. Việc thực hiện ẩn kho của bạn đằng sau một đơn vị công việc và bạn chỉ cần đăng ký một 'IUnitOfWorkFactory' và bạn đã hoàn tất. – Steven