我现在已经学习MVC大约2周了,从PHP开始学习,并且有点新手。我一直在关注创建通用存储库模式的教程,特别是这个模式https://sharpcodeblog.wordpress.com/tag/c/。我感到困惑的是如何调用GetRepositoryInstance()方法。
到目前为止,我所拥有的是
RepositoryFactory:
public sealed class RepositoryFactory
{
private static RepositoryFactory _instance;
private static readonly object _padlock = new object();
public static RepositoryFactory Instance
{
get
{
lock (_padlock)
{
return _instance ?? (_instance = new RepositoryFactory());
}
}
}
private RepositoryFactory()
{
}
public static IRepository<T> GetRepositoryInstance<T, TRepository>()
where TRepository : IRepository<T>, new() where T : System.Data.Entity.Core.Objects.DataClasses.EntityObject
{
return new TRepository();
}
}
我在哪里打电话:
public AccountUserMembershipProvider(IRepository<AccountUser> iRepository) : base()
{
_repository = iRepository ?? RepositoryFactory.GetRepositoryInstance<AccountUser, Repository<AccountUser>> ();
}
然而,我得到的错误是&#34;类型&#39; Portfolio.Models.AccountUser&#39;不能用作类型参数&#39; T&#39;在泛型类型或方法&#39; RepositoryFactory.GetRepositoryInstance()&#39;中。来自&#39; Portfolio.Models.AccountUser&#39;没有隐式参考转换。 to&#39; System.Data.Entity.Core.Objects.DataClasses.EntityObject&#39;。
这似乎是传递给该方法的唯一逻辑数据,但显然不是。有任何想法吗?感谢
答案 0 :(得分:0)
最后我把方法改为:
public static IRepository<T> GetRepositoryInstance<T, TRepository>(params object[] args)
where TRepository : IRepository<T>
where T : class
{
return (TRepository)Activator.CreateInstance(typeof(TRepository), args);
}
这样称呼它:
RepositoryFactory.GetRepositoryInstance<AccountUser, Repository<AccountUser>> ()
根据需要工作