我無法弄清楚如何讓Unity與我的通用存儲庫一起工作。這是我的基本設置:Unity依賴注入 - 具有通用存儲庫的方法返回類型
public static Repository<IEntity> GetRepository()
{
//This is of type CustomerRepository
return unitOfWork.CustomerRepository;
}
CustomerRepository : Repository<Customer>, ICustomerRepository
Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity
ICustomerRepository : IRepository<Customer>
IRepository<TEntity> : IDisposable where TEntity : class, IEntity
Customer : IEntity
在返回unitOfWork.CustomerRepository的錯誤是:
不能鍵入 'CustomerRepository' 隱式轉換爲 '資源庫'
完全迷路了,我已經嘗試了很多註冊方法,以至於我開始認爲我需要做其他事情來實現我想要的功能......在這一點上,我不知道我在使用RegisterType進行的操作,如您所見:
container.RegisterType<IEntity, Customer>();
container.RegisterType(typeof(Repository<Customer>), typeof(CustomerRepository));
container.RegisterType(typeof(CustomerRepository), typeof(Repository<Customer>));
container.RegisterType(typeof(Repository<IEntity>), typeof(Repository<Customer>));
container.RegisterType(typeof(Repository<Customer>), typeof(Repository<IEntity>));
container.RegisterType(typeof(Repository<>), typeof(Repository<IEntity>));
container.RegisterType(typeof(Repository<IEntity>), typeof(Repository<>));
//---------
container.RegisterType(typeof(IRepository<Customer>), typeof(Repository<IEntity>));
container.RegisterType<IRepository<Customer>, CustomerRepository>();
container.RegisterType(typeof(Repository<IEntity>), typeof(CustomerRepository));
//--------------------
container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
container.RegisterType<ICustomerRepository, CustomerRepository>();
container.RegisterType<IRepository<Customer>, ICustomerRepository>();
container.RegisterType<Repository<Customer>, CustomerRepository>();
container.RegisterType<IRepository<Customer>, CustomerRepository>();
container.RegisterType<IRepository<Customer>, ICustomerRepository>();
container.RegisterType<Repository<Customer>, CustomerRepository>();
container.RegisterType<IRepository<Customer>, CustomerRepository>();
container.RegisterType(typeof(IRepository<IEntity>), typeof(IRepository<Customer>));
沒有任何註冊它的方法正在幫助。
編輯1:
我怎樣才能得到這個工作?:
public static Repository<TEntity> GetRepository<TEntity>(string entityName, string conectionName) where TEntity : class, IEntity
{
var unitOfWork = new UnitOfWork(connectionName);
switch(entityName){
case "Customer":
return unitOfWork.CustomerRepository;
}
return null;
}
是的,那是相當很多我在做什麼,但我需要該方法的返回類型是通用的。我認爲我可以用依賴注入來實現這一點,但我猜不是嗎? 我也試過這樣: '公共靜態庫 GetRepository ()其中TEntity:類,IEntity' 其中return語句是: '庫 repository2 = repository1;' 基本上,我想基於參數的某個存儲庫並一般使用它。你知道這是否是正確的方向,或者我可以如何用Unity實現這一點? –
nworbkcin
兩個單獨的問題:1.您是否考慮製作IRepository協變? 2.如果'TEntity'設置爲'Customer',我想你只想返回'CustomerRepository'。在你的例子中,爲什麼你總是返回'CustomerRepository'? –
它被簡化了,例如,如果我將'TEntity'作爲'Customer',我想'CustomerRepository'。如果我把'TEntity'作爲'Product',我想'ProductRepository'。我只是拿出所有不相關的東西,不要分心我的真正問題。'IRepository'covariant是什麼意思? –
nworbkcin