【发布时间】:2014-03-21 06:33:33
【问题描述】:
更新:我正在尝试使用以下代码和存储库模式获取用户存储库。我得到了运行时转换异常
“无法将'Bidstruct.Repository.Repository`1[Bidstruct.Entities.User]'类型的对象转换为'Bidstruct.Repository.IUserRepository'”在这一行
userRepo = (IUserRepository)authUnitOfWork.Repository();
public class UserController : Controller
{
private readonly IUnitOfWork authUnitOfWork;
private readonly IUserRepository userRepo;
public UserController(
[Dependency("BidstructAuthUnitOfWork")] IUnitOfWork authUoW,
{
authUnitOfWork = authUoW;
userRepo = (IUserRepository)authUnitOfWork.Repository<User>();
}
}
public interface IUnitOfWork
{
IRepository<T> Repository<T>() where T : class;
}
public class UnitOfWork : IUnitOfWork
{
private readonly IDbContext _context;
private Hashtable _repositories;
public IRepository<T> Repository<T>() where T : class
{
if (_repositories == null)
_repositories = new Hashtable();
var type = typeof (T).Name;
if (!_repositories.ContainsKey(type))
{
var repositoryType = typeof (Repository<>);
var repositoryInstance =
Activator.CreateInstance(repositoryType
.MakeGenericType(typeof (T)), _context);
_repositories.Add(type, repositoryInstance);
}
return (IRepository<T>) _repositories[type];
}
}
// User Repository Interface
public interface IUserRepository : IRepository<User>
{
}
public class UserRepository : Repository<User>, IUserRepository
{
}
知道我做错了什么吗?
【问题讨论】:
-
你能显示你的 UserRepository 的代码吗?具体实现了哪些接口。
-
恕我直言,这不是实现 UnitOfWork 模式的正确方法。您可以参考genericunitofworkandrepositories.codeplex.com 以获得更好的设计
-
@Senthil 感谢您的建议。我也一定会调查的
-
@ Euphoric 这是我的用户存储库类 public class UserRepository : Repository
, IUserRepository { } -
我们需要知道您如何实例化实例。在这种情况下,您将创建新的 UserRepository 实例。
标签: c# asp.net-mvc generics repository-pattern