我試圖使用某些接口和工廠模式將Dal與Bll解耦。 包含接口的Data.Contracts將在我的Bll中引用。使用工廠模式解耦Dal存儲庫
這是一個小的測試代碼:
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」必須是非抽象類型,以便公衆參數構造函數 了一般類型或方法使用它作爲參數「T」「Data.Contracts.IDataRepositoryFactory.GetDataRepository()」
我的問題是: 哪個是正確的I實現使用工廠模式解耦業務層上的代碼? 我不能使用具體的實現UserRepository,因爲它繼承了BLL中我不想要的類。
任何幫助,將不勝感激。
謝謝,我在我的實現中發現了一個不起作用的約束,我用一個更簡單的模型和DI重建了一個小控制檯應用程序並解決了。 – MyOwnWay