c# - Autofac注册通用存储库,其中T不是类
问题描述
我在尝试解析用于数据库访问的通用存储库时遇到了一个问题。当我将这两个用作存储库实现/接口时,我无法解决例如IRepository<ICustomer>
:
界面:
public interface IRepository<T> where T : IDbModel
{ ... }
执行:
public class Repository<T> : IRepository<T> where T : DbModel
{ ... }
但是,当我在这两种情况下替换IDbModel
和DbModel
使用class
时,它都按预期工作。
我的注册看起来像这样:
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
{ }
推荐阅读
- rust - Rust:如何使用 Arc 在新生成的线程中使用特征中定义的方法?
- python-3.x - 尝试接收条带挂钩时在 Django 上获取 MultiValueDictKeyError
- python - 打印任何句子的第二个单词的函数当字符串像“ghanou djellal”时我遇到问题它什么也不返回
- c - 为什么我的关于反转位的 C 代码不起作用?
- php - 从输入 PHP 在数组中添加数组
- rust - 如何处理 tokio::spawn 闭包需要'static 和 &self?
- python - ValueError:概率在 numpy 中不是非负数
- xml - 为 XML 指定命名空间的本地相对路径
- api - NullPointerException 出现在 API 请求中 - POSTMAN
- databricks - 如何在 Databricks SQL 中查找具有相同(相似)名称的所有表