使用 Autofac 注册部分封闭泛型类型

2024-01-13

I have UnitofWork类及其实现IUnitOfWork。我尝试用 Autofac 注册它:

var builder = new ContainerBuilder();
builder
    .RegisterGeneric(typeof(UnitOfWork<Repository<>,>))
    .As(typeof(IUnitOfWork))
    .InstancePerDependency();

实施是:

public class UnitOfWork<T, O> : IUnitOfWork
    where T : Repository<O>
    where O : BaseEntity
{
}

public interface IUnitOfWork : IDisposable
{
    void SaveChanges();
}

给出一个错误“预期类型”

但这是在另一个项目上工作的:

public class Repository<T> : GenericRepository<T> 
    where T : BaseEntity
{
    public Repository(IDbContext context) : base(context) { }   
}

public abstract class GenericRepository<T> 
    : IRepository<T>, IQueryable<T> where T : BaseEntity
{
}

builder
    .RegisterGeneric(typeof(Repository<>))
    .As(typeof(IRepository<>))
    .InstancePerHttpRequest();

You 不能部分开放课程(例如与UnitOfWork<Repository<>,>你已经指定T但不是O) 里面一个typeof,尝试一下:

var builder = new ContainerBuilder();
builder
    .RegisterGeneric(typeof(UnitOfWork<,>))
    .As(typeof(IUnitOfWork))
    .InstancePerDependency();

The where T : Repository<O>通用约束将注意第一个参数应该是Repository<>

但它不能与RegisterGeneric因为它需要一个通用接口所以需要创建一个IUnitOfWork<T,O>

但你的模型很奇怪。为什么你的UnitOfWork need a Repository<>类型参数?

您可以得到一个,而不是将其作为类型参数Repository<>在你的UnitOfWork<E>构造函数:

public class UnitOfWork<E> : IUnitOfWork<E> where E : BaseEntity
{
    private readonly Repository<E> repository;

    public UnitOfWork(Repository<E> repository)
    {
        this.repository = repository;
    }

    //.. other methods

}

Where IUnitOfWork<E>

public interface IUnitOfWork<E> : IDisposable where E : BaseEntity
{
    void SaveChanges();
}

以及 Autofac 注册:

var builder = new ContainerBuilder();
builder
    .RegisterGeneric(typeof(Repository<>)).AsSelf();
builder
    .RegisterGeneric(typeof(UnitOfWork<>))
    .As(typeof(IUnitOfWork<>))
    .InstancePerDependency();
var container = builder.Build();

// sample usage
var u = container.Resolve<IUnitOfWork<MyEntity>>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Autofac 注册部分封闭泛型类型 的相关文章

随机推荐

  • 如何在 Windows 上用 C/C++ 为文件预分配空间?

    我正在向使用纯 C 函数的现有代码库添加一些功能 fopen fwrite fclose 将数据写入文件 不幸的是 我无法更改文件 i o 的实际机制 但我必须为文件预先分配空间以避免碎片 这会影响读取期间的性能 有没有比实际将零或随机数据
  • WebRTC 视频不显示

    我正在创建一对一的 webrtc 视频聊天室 但此代码不起作用 我想知道为什么 function hasUserMedia navigator getUserMedia navigator getUserMedia navigator we
  • 从 Android 设备发送 HTTPS/HTTP POST 时出现 UnknownHostException

    我正在尝试创建一个到 Google 服务器的 HTTP POST 来获取 ClientLogin Auth 如所述here http code google com android c2dm index html push 这篇文章的源代码
  • 视图中的 ASP.NET Web Api [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在这种情况下通过 webapi 创建一个登录页面 我不想使用令牌 但视图应该是安全的 不是直接在 URL 中调用 如果用户是管理员
  • CSS 替代行 - 隐藏一些行

    我正在尝试设计表格 使每一行都有不同的颜色 奇数 偶数 我有以下 CSS woo tr nth child even td background color f0f9ff woo tr nth child odd td background
  • 两阶段查找 - 需要解释

    编译器使用两阶段查找来编译模板类是什么意思 模板被编译 至少 两次 如果没有实例化 则会检查模板代码本身的语法 例如 任何语法错误 例如 etc 在实例化时 当确切类型已知时 将再次检查模板代码以确保所有调用对于该特定类型都有效 例如 模板
  • httr 有时会将 URL 中的“%”替换为“%25”

    使用时httr GET 在某些查询中它会替换 具有安全代表 25 但在其他查询中则不然 我找不到任何规则可以实现这种情况 我正在使用 httr 1 4 1 示例查询在哪里 被替换 请注意错误代码 并且输入的 URL 与返回的响应对象中的 U
  • Google Chromecast SDK 在后台拆解

    使用 iOS Sender API 框架 当我的应用程序进入后台时 SDK 会断开所有连接 并且我无法启动更多媒体 直到应用程序返回前台 我的应用程序播放音频并允许在后台运行和流式传输 是否有一个选项可以告诉 Googlecast 框架保持
  • 从 C# 中的 Richtextbox 中选择文本

    我想选择 RichTextBox 文本的最后一个 和 之间的文本 我有下一个代码 但 LastIndexOf 函数有错误 我不知道如何修复它 有人可以给我一些帮助吗 private void highlightText mRtbxOpera
  • 我应该如何将 Java 代码转换为 C# 代码?

    我正在将 Java 库移植到 C 我使用的是 Visual Studio 2008 因此没有已停止使用的 Microsoft Java 语言转换助手程序 JLCA 我的方法是创建一个与 Java 库类似的项目结构的新解决方案 然后将 jav
  • 单元测试 ASP.NET MVC 重定向

    如何对 MVC 重定向进行单元测试 public ActionResult Create Product product productTask Save product return RedirectToAction Success pu
  • 我可以将本机依赖项放在子文件夹中吗

    当我发布 dotnet core 项目时 它生成了一个文件夹 其中包含数百个框架和本机运行时文件 我知道这些文件是使一切正常工作所必需的 但是我可以将它们移到子文件夹中并仍然让我的应用程序运行吗 例如 MYAppFolder MyApp e
  • 为什么在 collections.deque 中间添加或删除比在那里查找慢?

    This wiki python org https wiki python org moin TimeComplexity关于某些数据结构的算法复杂性的页面说以下内容collections deque object deque 双端队列
  • 在自定义文本区域中显示插入符号而不显示其文本

    我有一个自定义文本区域 在此示例中 它随机地将字母变为红色或绿色 var mydiv document getElementById mydiv myta document getElementById myta function upda
  • 填写 BigQuery 中联接表的缺失值

    我在 BigQuery 中有一个表 其中包含发生某些交易时每天的净库存数量以及包含价格历史记录的表 如下所示 WITH trans AS SELECT DATE 2018 10 02 trans date 10 0 quantity UNI
  • 即使提供记录 ID 也无法更新嵌套属性

    我正在尝试更新嵌套记录 但由于某种原因它不起作用并且我的更新操作被忽略 如果我在控制台中运行以下代码 它会返回 true 但 field values attributes 实际上没有更新任何内容 只有 steps attributes 按
  • JIRA JQL:按阻止状态对卡片进行着色

    我正在尝试使用 JIRA Agile 的 卡片颜色 功能以及 ScriptRunner 插件 为 JIRA Agile 板上的阻塞卡片着色 我对 被阻止 的定义是 票证具有 被阻止 字段的值 或者以 被阻止 关系链接到未解决的票证 我能做的
  • 在 Pillow 中打开和加载图像时出现“打开文件过多”错误

    当运行以下代码时 KEEP for file in glob glob KEEP thing tT iI fF m pattern search file filename m group 1 keep Image open file ke
  • 如何避免从 jQuery 中的 contenteditable

    中删除键入的文本

    我正在使用 jQuery UI 可拖动组件来添加 span 内容可编辑 p 预期产出是 段落 p p 应该是可编辑的 并且可拖动组件应该能够拖放到段落以及段落的内容 p p 应该可以编辑 我的代码有问题 当我在里面输入一些东西时 p p 然
  • 使用 Autofac 注册部分封闭泛型类型

    I have UnitofWork类及其实现IUnitOfWork 我尝试用 Autofac 注册它 var builder new ContainerBuilder builder RegisterGeneric typeof UnitO