簡體   English   中英

Autofac注冊通用存儲庫,其中T不是類

[英]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替換IDbModelDbModel ,它可以按預期工作。

我的注冊如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM