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);
}
}
के लिए अब मैं भंडार रजिस्टर इस प्रकार है:StructureMap - रजिस्टर करने के लिए कैसे और हल एक खुला सामान्य प्रकार
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>();
यह विशेष रूप से अगर कोई नया खजाने साथ आता है वास्तव में बोझिल है,।
एक आसान और बेहतर पंजीकरण होगा:
For(typeof(IRepository<>)).Use(typeof(Repository<>));
लेकिन यह काम नहीं करता। स्ट्रक्चर मैप हर बार मुझे कह रहा है कि प्लगइनफैमिली कोर के लिए कोई डिफ़ॉल्ट इंस्टेंस परिभाषित नहीं किया गया है। डॉमेन.बेस. रिपॉजिटरीज.आईटीएमएम नियोक्ता रिपोजिटरी।
मैं stackoverflow पर खोज की है और कुछ नया पाया:
Scan(x =>
{
x.AssemblyContainingType(typeof(TeamEmployeeRepository));
x.AddAllTypesOf(typeof (IRepository<>));
x.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
लेकिन अब भी वही त्रुटि।
मुझे अपनी रिपॉजिटरीज को स्ट्रक्चर मैप 2.6.1.0 के साथ कैसे पंजीकृत करना है?
हालांकि यह सीधे आपके प्रश्न का उत्तर नहीं देता है, कृपया इस आलेख पर एक नज़र डालें: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work- कार्यक्षमता-from-repositories-using -ioc/41 32,186 # 4,132,186। यह भंडार पैटर्न को लागू करने का एक वैकल्पिक तरीका दिखाता है। कार्यान्वयन आपके भंडारों को काम की एक इकाई के पीछे छुपाता है और आपको केवल एक 'IUnitOfWorkFactory' पंजीकृत करने की आवश्यकता होती है और आप कर चुके हैं। – Steven