问题标签 [autofac-module]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net-core - Autofac 多个注册到单个服务。简单注入器 -> Autofac 翻译
我基于 Tripod 和其他灵感开发了一个 CQRS 风格的数据库访问框架,但针对 .NET Standard 并进行了简化以便于使用。我想将 IoC 拆分为单独的集成包,以便消费者可以轻松地获得我目前在内部进行的类型注册,而不会被锁定到特定的 IoC 容器中。我的问题是我只与 SimpleInjector 密切合作,因此不熟悉其他系统及其处理特定场景的细微差别。我迫切需要支持 Autofac,所以我想我会在这里尝试看看是否有人可以翻译。
我有以下 Simple Injector CompositionRoot 静态类:
在 ASP.NET Core 解决方案中,我从 Startup.Configure(...) 调用上述内容:
如果需要,这允许我切换到内存数据库进行单元测试。EntityDbContext 包含我所有用于调用上下文的工作单元方法,而无需为每个表指定显式 DbSet。IUnitOfWork、IReadEntities 和 IWriteEntities 接口都在 EntityDbContext 上定义方法。
因此,我不确定如何制作一个 Autofac 模块,该模块允许通过传入 DbContextOptions 对 dbcontext 进行范围注册,然后对该注册进行多个接口注册。
有谁知道如何做到这一点?
asp.net-core - .NET Core 3.0 中 Autofac 模块的依赖注入
我对创建和注册模块很陌生,但我试图更好地理解整个过程。目前我正在尝试将依赖项注入到 autofac 模块中,但我认为问题在于 autofac 在依赖项注入发生之前注册了它的模块。这是我的安全模块:
这是我在 program.cs 中注册模块的部分:
这是我收到的错误。有没有办法指定这个模块应该在以后注册?还是我错过了重要的信息?
DependencyResolutionException:无法使用可用的服务和参数调用类型“inQuba.CX.Web.Api.AutofacIntegration.SecurityModule”上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数:无法解析参数“Microsoft。构造函数“Void .ctor(Microsoft.Extensions.Configuration.IConfiguration)”的 Extensions.Configuration.IConfiguration 配置。
autofac - 在 .NETCore3.1 中用 Autofac 替换 CastleWindsor
我在我的 ASP.NETCore2.2 WebAPI 项目中使用 CastleWindsor 并且工作正常。我现在正在迁移到 ASP.NETCore3.1,它看起来不像 CastleWindor 对此有官方支持,所以我决定迁移到 Autofac 进行最小的更改,但在解决依赖关系时遇到了一些问题。
在我的项目中,我在应用程序的不同层之间保持非常松散的耦合,即业务层、数据层和翻译层。所有这些层都在它们自己的程序集中。然后在我的主项目中,我有一个文件夹说“依赖项”,它将保存不同层的所有 DLL。此外,我有一个单独的项目,其中列出了由不同层实现的所有接口,这些接口需要由 IoC 容器解决。
具有所有接口的项目如下所示:
实施项目如下所示:
在我迁移的 .netcore3.1 项目中使用 Autofac,Startup.cs 如下所示:
DependencyResolver 是一个继承自 Autofac.Module 的类,它再次位于不同项目的单独程序集中,如下所示:
我收到此错误并且无法修复它:“:”尝试激活“POC.Person.Controllers”时无法解析“Shared.Interfaces.IBusinessLayer`1[Models.Person]”类型的服务.PersonController'。","
在我的控制器内部,我进行了如下注入:
Program.cs 看起来像这样:
看起来 autofac 涉及泛型,注册和解析类型不是那么简单吗?
autofac - Autofac 服务未注册,但已注册
最近我对 Autofac 有一些问题。
我有这样的聚合服务:
我正在这样注册它:
当我这样做时:
我收到此错误:
我有很多程序集,我使用 Autofac 模块。如果我在模块中放置一个断点,我会看到它被调用并注册。此外,如果我检查 Container 注册,我会看到 ICommonServices 有一个注册:
如果我将注册从 AutofacModule 移到主程序集,jst 在 builder.Build() 之前,那么一切正常,Autofac 能够解决它。
如果服务已注册,为什么会出现错误?这不是唯一的一个。
c# - 如何从解析依赖项将参数传递给 Autofac 模块
目前我有一个 autofac 模块,它接收一个字符串作为参数,并且该字符串来自另一个依赖项。
我试图使用下面的代码传递它,我的问题是:这是正确的方法还是有更好/改进的方法来做到这一点?
c# - 将模块属性注入动态注册的组件
使用 autofac json 配置注册模块时,您可以传入属性和/或参数。
有没有办法传递ModuleProps
给我刚刚注册的类型?
autofac - Autofac - 添加注册后添加注册
我想订阅一个在添加注册后调用的全局事件。
我不想为每个注册的服务/组件手动订阅一个事件,因为这是样板代码,在添加新注册时很容易忘记它。
当事件触发时,我想对已经注册的注册进行一些检查,如果满足条件,则它是一个命名注册,它是一个引用类型,然后我想添加其他/新注册,这应该在容器构建之前发生。
实现这一目标的正确方法是什么?
我可以在派生自 Module 的 CustomModule 中执行此操作吗?
溴
dependency-injection - Autofac 没有拦截到哪种类型的 IInterceptor
我有一个问题,我正在尝试使用 Autofac 记录拦截器。但是 logaspect 没有拦截。确实 aspectInterceptor 选择器在单击添加方法时没有拦截。所以你可以看到我的流程,
看到乔纳森的评论后,我想问一下问题可能是 asyc 方法吗?
Pogram.cs
//--------
AutofacResolverModule.cs
//---------
AspectInterceptorSelector.cs
BaseService.cs
LogAspect.cs
方法拦截器.cs
MethodInterceptorBaseAttribute.cs
所以我几乎一个月都找不到这个解决方案,有什么想法吗?
c# - 在解析时使用特定于模块的注册?
我有一个应用程序,它使用两个不同的模块(实现为 Autofac.Module)来注册它们提供的服务。每个都只是有一个硬件设备的适配器,这些设备通过不同的方法产生相同的数据。
现在,当我在我的主应用程序中注册该模块时,它工作正常并且依赖关系得到正确解决。
在我的主应用程序中,我还使用IConfigSource
, 来读取/写入应用程序特定的设置。当我IConfigSource
在那里使用不同的设置文件注册另一个时,问题变得很明显。
在解决时,第二次注册生效,我ModuleA
收到了错误的配置文件阅读器。
环顾四周寻找解决方案,我尝试通过更改注册类型来解决此问题,如下所示:
public interface IModuleAConfigSource : IConfigSource {}
和
builder.Register(c => new IniConfigSource("moduleA.ini")).As<IModuleAConfigSource>();
但这不起作用。Autofac 在解决时抱怨该类型IniconfigSource
不可分配给接口 IModuleAConfigSource。我在应用程序启动时在单个函数中使用构造函数注入和注册。
这里有什么好的策略?我知道我可以使用具体类型来解决这个问题,但是有没有办法让注册模块保持本地化,即在解析类型以使用该模块的注册时?
c# - Autofac 是否提供了在运行时使用服务/中间件加载卸载插件的方法?
我是 autofac 的新手,在我的项目中使用 .net 5-6,我在不同的模块中构建了我的应用程序,这些模块在应用程序启动时加载(使用 alc)。但我想知道 autofac 是否可以在运行时加载/卸载这些完整的应用程序插件。很像 wordpress 等的设计方式。
你加载一个包含所有插件 dll/文件的 zip 文件并在运行时管理它的信息?包括服务和中间件初始化。