问题标签 [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.

0 投票
1 回答
292 浏览

c# - Autofac:如何分离多个插件

我有一个为不同格式生成输出的项目。架构大概是这样的:

Xyz.FormatA 和 ...FormatB 都依赖于 ...Core。跑步者取决于一切。

现在Core暴露了各种接口,例如

等等以及一些抽象类。FormatA 和 FormatB 都包含 IFormatWorker 的实现(这是一种特定于格式的根对象,并没有真正这样称呼,这个例子只是我需要做的事情的抽象)和其他的,主要是通过派生自 Core 中的抽象类它已经完成了部分工作。Runner 只是实例化具体的 IFormatWorkers 并让他们完成他们的工作。

到目前为止,这一切都是在没有任何 IOC 容器的情况下进行的。现在我想切换到使用 Autofac。

现在我的问题是:什么是正确的机制来使 Xyz.FormatA 中的 IFormatWorker 的实现从 Xyz.FormatA 内部获得 IFormatSpecifics、IWriter 等的实现,对于 FormatB 类似。根据我的阅读,我认为正确的方法必须与使用模块(每种格式一个)和密钥服务有关。另一方面,我在这里也看到了关于 stackflow 的参考(https://stackoverflow.com/a/26798803/2105891),这似乎表明对于类似插件的场景,单独的容器可能是正确的事情。

编辑:根据我的阅读,多租户注册也可能是正确的 - 只是我没有任何默认值。

谢谢,马克斯

0 投票
1 回答
289 浏览

c# - Autofac 从引用的和非引用的程序集中加载依赖项

我看到很多问题询问如何加载所有引用的程序集,即使不直接使用,但我想更进一步。我正在构建一个可以扩展的服务和接口,目的是我可以用其他类型扩展 Sender/Receiver,例如:接口负责发送 SMS 消息并且可以有不同的适配器,比如我有两个不同的应用程序想要使用 SMS 的人,每个人都有自己的ISmsAdapterand实现ISmsReplyAdapter,服务不一定会引用程序集(应用程序由 Windows 服务和用于接收回复的 WebAPI 服务组成)。

我希望能够做的不仅仅是注册我在引用程序集中的 autofac 模块,而且还在程序集中注册模块,这些模块在特定文件夹中,例如 /bin/plugins 或类似的东西

我找不到任何与此相关的东西,除了Caliburn.Micro它有一个DirectoryCatalog与我想要的类似的东西

请问有谁知道我如何能够使用 Autofac 实现这一目标?

0 投票
0 回答
110 浏览

asp.net-mvc - 使用 log4net 和 autofac 具有不同设置的多个日志

我正在使用带有和的ASP.Net框架来制作一个小型 Web 应用程序log4netAutofac 4.0

我的应用程序必须有多个日志实例,每个实例具有不同的设置,即:FileLogger、、DatabaseLogger...

我正在为autofac使用 log4net 模块:

谁能帮我解决这个问题?谢谢,

0 投票
2 回答
417 浏览

c# - Autofac - Delegate Factories + Type Interceptors together

I am trying to get AutoFac Delegate Factories & Type Interceptors to play nicely with each other, but I cannot seem to get the behaviour I want.

(http://docs.autofac.org/en/latest/advanced/delegate-factories.html) (http://docs.autofac.org/en/latest/advanced/interceptors.html)

In the example below, I want calls to the IQuoteService.GetQuote(...) to be intercepted by the CallLogger interceptor.

I've tried both of the Enable___(); extension methods for enabling interception, but none of them seem to correctly intercept the call.

I suspect the problem is the way that Autofac is registering the proxy and the signature of the delegate, but to be honest I am a little stuck... I don't know Autofac as well as I know Castle Windsor, but this project is using Autofac.

ANSWERED BELOW

Code updated to working example:

0 投票
1 回答
558 浏览

c# - 跳过 autofac.json 中配置的未知 autofac 模块

我的应用程序是从autofac.json文件初始化的:

但是每个插件都不是强制性的。

当我使用缺少的插件运行应用程序时,会引发以下异常:

如何忽略应用程序文件夹中不存在的插件?

0 投票
0 回答
103 浏览

dependency-injection - 从上下文调用服务层

首先让我说我可能会走错路,但我不知道如何让它发挥作用。

我想要实现的是在我插入/更新/删除数据库条目之后调用我的服务层来执行一些功能。

我最初的想法是将我的服务注入到我的上下文中,但不确定这是否可能,或者是否明智。

这是我注入服务“serviceBus”的上下文:

为了注册“serviceBus”,我使用 Autofac,如下所示:

我在我的应用程序的其他部分使用依赖注入,它工作正常,但在我的上下文中使用它时却不行。我得到的错误是:

我是以错误的方式接近这个吗?非常感谢任何想法或评论。

这是一个首先使用 EF6 代码的 MVC 网站。

0 投票
2 回答
1004 浏览

autofac - 安装 Autofac.WCF 后无法加载文件或程序集 'Autofac, Version=3.0.0.0

如果我执行以下步骤,我会收到异常:

测试1:

MainApp-项目:

  1. 添加了 Nuget 包 Autofac 版本 4.5.0
  2. 添加了 Nuget 包 Autofac.WCF 版本 4.0

模块项目:

  1. 添加了 Nuget 包 Autofac.WCF 4.0 版(Autofac 3.3.1 将自动安装)
  2. 通过 Nuget Manager Autofac 更新到 4.5.0 在通过 Directorycatalog 加载模块期间,MainApp 的引导程序会引发此异常。

Autofac.WCF 具有依赖关系 Autofac >=3.3.1 && < 5.0.0

Bootstrapper.cs 中的异常:Prism.Wpf.dll 中出现“System.IO.FileLoadException”类型的未处理异常

附加信息:Die Datei oder Assembly "Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da" oder eine Abhängigkeit davon wurde nicht gefunden。Eine bestimmte Datei konnte nicht gefunden oder geladen werden。(Ausnahme von HRESULT:0x80131621)

测试 2:

我也尝试了这些步骤:

主应用程序:

  1. 使用 nuget 管理器安装 Autofac 4.5.0
  2. 使用 nuget 管理器安装 Autofac.WCF

模块:

  1. 使用 nuget 管理器安装 Autofac 4.5.0
  2. 使用 nuget 管理器安装 Autofac.WCF

有可能,我做错了,因为我第一次使用 Autofac 和 Autofac.WCF。我在统一 IoC 之前使用过。

引导程序.cs:

模块:

更新

我按照评论中的要求卸载了软件包,然后按照测试 2 中提到的步骤重新安装了所有内容,问题仍然存在。

如果我通过删除覆盖方法 CreateModulecatalog 停用了模块加载,则问题不再发生,这意味着 MainApp 中的 Autofac 4.5.0 + Autofac.WCF 4.0.0 有效,但如果我加载模块(包括 Autofac 4.5 .0 和 Autofac.WCF)与 CreateModulecatalog Autofac 4.5.0 和 Autofac.WCF。

请记住,模块没有 app.config,因为它是一个模块 (dll) 项目。

对我来说,让一个项目按照以下要求运行是非常重要的:

主应用程序:

  1. Autofac 4.5.0 + Autofac.WCF 4.0.0 + Prism.WPF
  2. 模块应从目录加载
  3. MainApp 启动一个可执行文件

模块:

  1. Autofac 4.5.0 + Autofac.WCF 4.0.0(命名管道)+ Prism.WPF
  2. 模块必须托管 WCF 服务,因为 mainapp 启动一个可执行文件,而这些可执行文件必须使用 wcf 服务 + ioc。

对我来说一切都被阻止了,因为无法在 mainapp(引导程序)中毫无例外地使用 autofac + autofac.wcf 加载模块。

如果有人可以支持我,那么我可以设置一个带有共享桌面的 teamviewer 会话来解决我的问题并给我指导。

0 投票
0 回答
683 浏览

c# - Autofac - 如何解析模块中注册的类型?

我在 ASP.Net MVC 应用程序中使用 Autofac 模块时遇到问题。

我使用 NLogModule 来“注册” Nlog :

我还在构建器中添加了模块:

对于在需要我的记录器的构建器中注册的不同服务,一切正常。

所以现在,我想将每个 SQL 查询记录在一个文件中。我遵循以下文章https://msdn.microsoft.com/en-us/library/dn469464(v=vs.113).aspx

最后在我的 LoggerCommandInterceptor 类中,我需要解析 ILogger。但它不起作用。

我不明白为什么它不起作用。与服务的唯一区别是我自己创建了 LoggerCommandInterceptor 的实例

Autofac 使用其他服务创建实例。

有人能帮我吗?

非常感谢。

麦克风。

0 投票
0 回答
69 浏览

.net - Autofac 注册 - 对于用户定义的线程

在我们的项目中,我们有多个线程并行运行。因此,对于每个客户,我们都有各自的主题。目前我们有一个应用程序级别的日志,使用 Serilog,所有线程的日志都写入一个文件夹。我们计划对此进行更改,以便将每个客户的日志放在各自的文件夹中。

该文件夹应在其名称中使用 CustomerId 形成,并且在为客户创建线程时,应注册它以便在运行时解析它。

我尝试在我们拥有的模块中注册,但问题是在注册模块时我们不会知道客户 ID。

所以基本上我的要求是,我们应该为每个线程(用户定义)有一个记录器实例,并且能够在后面的其他类中使用它,或者换句话说,使用线程名或一些关于不同线程注册相同的组件其他字段,例如 customerid。

谁能帮助我如何在运行时注册和解决这个问题?

谢谢!

0 投票
1 回答
725 浏览

c#-4.0 - Autofac - 如何解析使用 JSON 配置注册的实例

我们的要求是为不同的用户定义线程提供不同的 Logger 实例。

] }

我创建了这个 JSON 并将其注册为一个模块,以便每个值都有单独的注册 - 18122 和 18105。但我不明白如何在运行时解决它们以及确切的位置。

我创建了 2 个文件夹,但记录器不写入其文件,它也写入另一个文件。简而言之,我通过解析获得的实例不是该特定值的实例。

如果我在构造函数中注入它,只有 18105 得到解决。

有人可以帮忙吗!

谢谢!