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

What to pass into my RepositoryFactory instance function

我从 PHP 开始学习 MVC 已经大约 2 周了,我还是个新手。我一直在关注创建通用存储库模式的教程,特别是这个 https://sharpcodeblog.wordpress.com/tag/c/。我感到困惑的是如何调用 GetRepositoryInstance() 方法。

到目前为止我所拥有的是

存储库工厂:

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>> ();
    }

但是我得到的错误是“类型 'Portfolio.Models.AccountUser' 不能用作泛型类型或方法 'RepositoryFactory.GetRepositoryInstance()' 中的类型参数 'T'。没有从 'Portfolio.Models.AccountUser' 到 'System.Data.Entity.Core.Objects.DataClasses.EntityObject'.

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

最后我把方法改成了这样:

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

根据需要工作