[英]Autofac register generic repository where T is not class
嘗試解析通用存儲庫以進行數據庫訪問時遇到一個問題。 當我使用這兩個作為倉庫實現/接口時,我無法解析例如IRepository<ICustomer>
:
接口:
public interface IRepository<T> where T : IDbModel
{ ... }
執行:
public class Repository<T> : IRepository<T> where T : DbModel
{ ... }
但是當我在兩種情況下都用class
替換IDbModel
和DbModel
,它可以按預期工作。
我的注冊如下:
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterType<DbModel>().As<IDbModel>();
builder.RegisterType<Customer>().As<ICustomer>();
為了完整起見,這里是ICustomer
:
public interface ICustomer : IDbModel
{ ... }
Customer
:
public class Customer : DbModel, ICustomer
{ ... }
IDbModel
:
public interface IDbModel
{ ... }
和DbModel
(我在刪除abstract
時檢查了它是否起作用,但是沒有):
public abstract class DbModel : IDbModel
{ ... }
我想知道是否可以通過某種方式進行首次嘗試?
通過要求Autofac解析IRepository<ICustomer>
,它將嘗試解析Repository<ICustomer>
並且ICustomer
不是DbModel
要解決該錯誤,您應該將IRepository<TModel>
上的類類型約束替換為接口類型約束。
public class Repository<T> : IRepository<T>
where T : IDbModel
{ }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.