【发布时间】:2013-12-11 05:23:24
【问题描述】:
我正在尝试使用一些接口和工厂模式将 Bll 与 Dal 分离。 包含接口的 Data.Contracts 将在我的 Bll 中引用。
这是一个小测试代码:
class Program
{
static void Main(string[] args)
{
IDataRepositoryFactory _DataRepositoryFactory;
IUserRepository userRepository = _DataRepositoryFactory.GetDataRepository<IUserRepository>();
}
}
public abstract class RepositoryBase<T> where T : class, new() { }
public class UserRepository : RepositoryBase<User>, IUserRepository
{
public UserRepository() { }
}
public class DataRepositoryFactory : IDataRepositoryFactory
{
public T GetDataRepository<T>() where T : IDataRepository, new()
{
return ObjectBase.Container.GetExportedValue<T>();
}
}
public class User
{
public int Id { get; set; }
}
public abstract class ObjectBase
{
public ObjectBase() { }
public static CompositionContainer Container { get; set; }
}
public interface IDataRepository { }
public interface IDataRepository<T> : IDataRepository where T : class, new() { }
public interface IUserRepository : IDataRepository { }
public interface IDataRepositoryFactory
{
T GetDataRepository<T>() where T : IDataRepository, new();
}
最后我得到了我的错误:
'Data.Contracts.IUserRepository' 必须是具有公共无参数构造函数的非抽象类型才能按顺序 将其用作泛型类型或方法“Data.Contracts.IDataRepositoryFactory.GetDataRepository()”中的参数“T”
我的问题是: 哪个是使用工厂模式解耦业务层代码的正确实现? 我不能使用具体实现 UserRepository,因为它继承自 BLL 中我不想要的类。
任何帮助将不胜感激。
【问题讨论】:
标签: architecture repository factory-pattern decoupling