- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Repository 概念的新手,遇到了一些问题。我在我的 MVC 应用程序中创建了简单的存储库类。
public interface IRepository<TEntity> where TEntity : class
{
List<TEntity> FetchAll();
IQueryable<TEntity> Query { get; }
void Add(TEntity entity);
void Delete(TEntity entity);
void Save();
}
public class SqlRepository<T> : IRepository<T> where T : class
{
readonly DataContext _db;
public SqlRepository(DataContext db)
{
_db = db;
}
#region IRepository<T> Members
public IQueryable<T> Query
{
get { return _db.GetTable<T>(); }
}
public List<T> FetchAll()
{
return Query.ToList();
}
public void Add(T entity)
{
_db.GetTable<T>().InsertOnSubmit(entity);
}
public void Delete(T entity)
{
_db.GetTable<T>().DeleteOnSubmit(entity);
}
public void Save()
{
_db.SubmitChanges();
}
#endregion
}
在我的 Controller 中,我像这样为指定的表类初始化存储库类
public class AdminController : Controller
{
private readonly SqlRepository<User> _userRepository = new SqlRepository<User>(new DataContext(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()));
private readonly SqlRepository<Order> _orderRepository = new SqlRepository<Order>(new DataContext(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()));
//Skip code
}
但我在我的应用程序的许多地方一次又一次地复制这段代码。实例化这些存储库类的最佳位置是什么?
最佳答案
我认为您应该通过它的界面引用存储库:
public class AdminController : Controller
{
private readonly IRepository<User> _userRepository;
private readonly IRepository<Order> _orderRepository;
public AdminController(IRepository<User> userRepository,
IRepository<Order> orderRepository)
{
_userRepository = userRepository;
_orderRepository = orderRepository;
}
//Skip code
}
并通过一些依赖注入(inject)框架注入(inject)实现。
更新
您可以使用 Ninject用于对 Controller 的依赖注入(inject)。这是 Example如何将 DependencyResolver 添加到您的应用程序。在你的情况下,你可以这样配置内核:
IKernel kernel = new StandardKernel();
var connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
kernel.Bind(typeof(DataContext)).ToMethod(context => new DataContext(connectionString));
kernel.Bind(typeof(IRepository<>)).To(typeof(SqlRepository<>));
就是这样。没有重复。依赖关系已解决。您的类(class)不依赖于具体的存储库。您可以轻松模拟依赖项以进行测试。
关于c# - IRepository 概念,在何处创建指定的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007043/
我见过两种不同的创建通用存储库的方法。这两种方法(优点和缺点)之间有什么区别?请忽略方法上的差异,因为我对 之间的差异感兴趣 public interface IRepository where T
我正在为我的 mvc web 应用程序寻找一个简单的 IRepository 接口(interface),我在周围做了很多搜索,有多少人就有多少意见。所以我决定请教专家 如果能推荐一个常用的IRepo
我试图从基础开始,但无法理解如何创建此最小起订量对象。 public class TestRefMedicalSpecialty { private Mock> mockRefMedical
我已经为多个域实现了 IRepository 接口(interface),但我不知道如何调用具体方法。 代码如下: public interface IRepository where T : cla
我知道有一个 Unit Of Work 是在抽象之上有一个抽象 (DbContext),这肯定是一种反模式,或者至少不是必要的。 我有以下问题: 我有一个像这样的通用 IRepository: pub
我希望在一个小项目中使用 IRepository 模式(由 NHibernate 支持,如果它重要的话)。域是一个简单的域,有意让我专注于理解 IRepository 模式。单独的域类是 Movie,
我想知道使用 IRepository 模式处理关系数据的推荐方法是什么。 我的数据库有下表,列名在括号中: 计划(PlanId、名称、创建日期、修改日期、ViewId) 区域(AreaId、名称、nT
我正在设计我的 ASP.NET MVC 应用程序,我遇到了一些有趣的想法。 我见过的许多示例都描述和使用了存储库模式 ( IRepository ),所以这就是我在学习 MVC 时所做的方式。 现在我
当实际加载数据时,我对使用“IRepository 模式”时感到有些困惑。 目前我有这样的事情: public class MainViewModel : ViewModelBase { //
我使用提到的存储库编写了以下方法在以下博客文章 (http://www.codecapers.com/post/Using-RavenDB-with-ASPNET-MVC.aspx) 中使用 Rave
我是 Repository 概念的新手,遇到了一些问题。我在我的 MVC 应用程序中创建了简单的存储库类。 public interface IRepository where TEntity
我想模拟一个内部存储库的工作单元接口(interface),用于单元测试目的。到目前为止,我可以像下面那样做。 namespace Liquid.Service.UnitTest { usin
什么是 IRepository?为什么使用它,简短的例子不会有什么坏处。 最佳答案 MVC 促进关注点分离,但这并不止于 MVC 级别。 数据访问本身就是一个问题。应该是在MVC的M位,即模型中完成。
可以说我的 IService 拥有 IRepository 拥有的一切,而且还有一些特定的操作吗? 代码如下: public interface IRepository { T Add(T E
我已经实现了存储库模式并且效果很好。 public interface IServiceRepository { User GetUser(int id); User GetUser(
我正在使用通用存储库接口(interface),它允许我添加、查找、更新和删除不同类型的对象。然后我实现了两个具体的存储库,并且可以在不更改应用程序的情况下切换它们。一切都奇妙地脱节。但我遇到了一个障
我一直在尝试想出一种方法来编写适用于各种数据存储的通用存储库: public interface IRepository { IQueryable GetAll(); void Sav
在典型的三层系统中,GUI->DOMAIN->DAL,IRepository 属于哪里?它属于 DOMAIN 还是 DAL。我对正交性和服务层了解不够,不知道有什么区别。(编辑)请允许我澄清一下。 I
我有以下项目布局: MVC UI |...CustomerController (ICustomerRepository - how do I instantiate this?) Data Mode
在 Orchard CMS 中使用 IRepository<>很常见。 所以我问自己,使用 IRepository<> 有什么好处?及其 Fetch()方法而不是简单地使用 Linq to SQL查询
我是一名优秀的程序员,十分优秀!