gpt4 book ai didi

c# - Autofac 修饰使用程序集扫描注册的开放泛型

转载 作者:太空狗 更新时间:2023-10-29 22:11:09 27 4
gpt4 key购买 nike

我正在尝试将 autofac 装饰器支持功能应用于我的场景,但没有成功。在我的例子中,它似乎没有正确地将名称分配给注册。

有没有办法用名称注册扫描的程序集类型,以便我以后可以在开放的通用装饰器 key 中使用它?

或者也许我完全错了,在这里做了不恰当的事情?

builder.RegisterAssemblyTypes(typeof(IAggregateRepositoryAssembly).Assembly)
.AsClosedTypesOf(typeof(IAggregateViewRepository<>)) //here I need name, probably
.Named("view-implementor", typeof(IAggregateViewRepository<>))
.SingleInstance();

builder.RegisterGenericDecorator(typeof(CachedAggregateViewRepository<>),
typeof(IAggregateViewRepository<>), fromKey: "view-implementor");

最佳答案

这是一次尝试,不是在 Visual Studio 前面,因此重载解析可能不完全正确:

builder.RegisterAssemblyTypes(typeof(IAggregateRepositoryAssembly).Assembly)
.As(t => t.GetInterfaces()
.Where(i => i.IsClosedTypeOf(typeof(IAggregateViewRepository<>))
.Select(i => new KeyedService("view-implementor", i))
.Cast<Service>())
.SingleInstance();
  • Named()只是 Keyed() 的语法糖, 它将组件与 KeyedService 相关联
  • As()接受 Func<Type, IEnumerable<Service>>

您还需要:

using Autofac;
using Autofac.Core;

关于c# - Autofac 修饰使用程序集扫描注册的开放泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com