将什么传递到我的 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>> ()
根据需要工作
我从 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>> ()
根据需要工作