什么传递到我的RepositoryFactory实例函数

时间:2016-01-16 18:40:34

标签: c# repository entity repository-pattern

我现在已经学习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;。

这似乎是传递给该方法的唯一逻辑数据,但显然不是。有任何想法吗?感谢

1 个答案:

答案 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>> ()

根据需要工作