我正在使用在这个问题的答案中找到的存储库模式:
为每个对象创建通用存储库与特定存储库的优势是什么? https://stackoverflow.com/questions/1230571/advantage-of-creating-a-generic-repository-vs-specific-repository-for-each-objec
也就是说,每个存储库都继承自一个抽象基类,该基类包含添加、删除等通用方法,并且还为该存储库/实体特有的任何方法实现特定的存储库接口。
ie.
public class CompanyRepository : Repository<Company>, ICompanyRepository {
...
}
在我的业务层中,我使用结构映射来获取存储库的实例,但我不确定如何使用它。
// Structure Map initialisation
ObjectFactory.Initialize(
x =>
{
x.For<ICompanyRepository>().Use<CompanyRepository>();
});
解决实例:
return ObjectFactory.GetInstance<ICompanyRepository>();
然而,我得到的实例是一个接口,而不是整个存储库实现。我无权访问基类上的方法(Repository<Company>
)。通常的方法是什么?
这里的关键是要想到Repository<>
仅作为实施细节。您不会直接访问其上的任何方法;相反,您将公开所有方法,包括Insert
and Delete
,在界面上:
public interface ICustomerRepository
{
// ...Customer-specific queries...
void Insert(Customer customer);
void Delete(Customer customer);
}
当你实现接口时CustomerRepository
,你只需通过Insert
and Delete
调用受保护的方法Repository<>
正如原始问题中所讨论的。
您在问题中陈述的 StructureMap 注册正是我所期望的。的目的Repository<>
然后是帮助实现特定于实体的接口。请记住,接口将始终包含存储库的完整公共 API,这应该为您指明正确的方向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)