问题标签 [autofac]

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 投票
3 回答
1446 浏览

configuration - 使用 web.config 在 Autofac 中注册工厂类

我一直在寻找一种使用XmlConfiguration在 autofac 中注册工厂类的方法,但文档似乎有点薄。

我想要完成的是在我的配置中执行以下操作:

builder.Register(c => MyFactory.GetMyObject()).As<IMyObject>();

有什么好的方法可以做到这一点吗?

0 投票
2 回答
5130 浏览

dependency-injection - Autofac 可以做自动自绑定吗?

我知道一些 DI 框架支持这一点(例如Ninject),但我特别想知道Autofac是否有可能。

我希望能够向 Autofac 容器询问具体类,并返回一个注入了所有适当构造函数依赖项的实例,而无需注册该具体类。即,如果我从不显式绑定它,则自动将具体类绑定到自身,就好像我调用了builder.Register<MyClass>();

一个很好的例子就是 ViewModels。在 MVVM 中,分层是这样的,即只有 View 依赖于 ViewModel,并且通过松散的类型来实现,并且无论如何您都不会对 View 进行单元测试。所以没有必要模拟 ViewModel 进行测试——因此没有理由为每个 ViewModel 提供一个接口。所以在这种情况下,通常的 DI 模式“注册这个接口来解析这个类”是不必要的复杂性。builder.Register<MyClass>();在处理像具体类这样简单的事情时,显式的自绑定,比如,也感觉像是一个不必要的步骤。

我知道Autofac 文档中基于反射的注册示例,但这也不符合我的口味。我不希望提前注册每个可能的课程的复杂性(和缓慢性);我希望框架在我需要的时候给我我需要的东西。约定优于配置,等等。

有什么方法可以配置 Autofac,让它可以说“哦,这是一个具体的类型,还没有人注册它,所以我就让它像使用默认设置注册一样”?

0 投票
2 回答
3300 浏览

logging - 使用 Common.Logging 和 Autofac 的自动化工厂?

我想将 ILog 注入到我的类中,而不是 ILoggerFactoryAdapter,但是 ILoggerFactoryAdapter 需要调用类的名称(想要记录某些内容的类,所以我可以正确分类)所以 Autofac 可以以某种方式识别正在请求的类ILog 并从工厂自动创建 ILog?

0 投票
2 回答
27983 浏览

c# - 使用 Autofac 解析通用接口

给定以下代码,如何在 autofac 中解析正确的 SomeInstance?

我想根据子类上泛型的类型选择 SomeInstance1 或 2 。

因此,例如,我有一个子类的集合(SubClass1、2....),并且在迭代它们时我想选择正确的 SomeInstance 类。

0 投票
1 回答
1966 浏览

c# - Autofac测试所有注册类型都可以解析

我有一堆用 Autofac 注册的类型,其中一些依赖关系相当深。是否有内置的方法来测试我可以解析所有已注册的类型?我想在应用程序启动时快速失败,而不是几分钟后部分。

这就是我目前正在做的事情,它似乎有效,但我仍然想知道是否有更好的方法。

0 投票
3 回答
8789 浏览

c# - Autofac 参数传递和自动装配

无法理解在 Autofac 中传递的参数,以下代码不起作用:

抛出:

但以下代码确实有效:

0 投票
1 回答
817 浏览

asp.net-mvc - 带有 AUTOFAC 的 ASP.NET MVC - 自定义错误消息消失

我的自定义错误消息在途中停止工作,我收到了这个错误。有任何想法吗?

Autofac.ComponentNotRegisteredException:请求的服务“controller.error.aspx”尚未注册。

我以前从未做过任何事情来注册它们。

我看到了几个关于自定义错误消息的问题,但我找不到这些回复中提到的任何其他错误。

编辑:我在 web.config 中尝试过“On”和“RemoteOnly”。我在 Shared 文件夹中有一个 Error.aspx。我正在使用 [ErrorHandler] 属性。这工作了很长时间,当我对 Global.asax 中的 Autofac 配置进行一些更改时,可能会停止工作。有关服务未注册的错误消息在错误退出工作的同时开始。我不知道如何用 Autofac 注册它。

0 投票
4 回答
1175 浏览

asp.net - autofac、ASP.NET 集成和 Dispose

这里是 Autofac 新手,但我喜欢我目前所看到的。我正在尝试利用已解析对象的请求生命周期,但在确认请求完成后确实发生了处置时遇到了麻烦。

我有一个一次性对象,我在页面请求开始时获得并在最后处理。我现在正在使用 autofac 来获取对象的实例,我想看看 autofac 是否会为我进行处理。

我已经在相关对象上检测了 Dispose() 方法,当我的页面进行生命周期管理时,我可以看到它“触发”。当我不处置自己但让 autofac 去做时,我看不到任何证据。

我正在使用这些说明来配置 thigns,包括 web.config 和 global.asax 更改。我能够很好地实例化该对象,但我不知道它是否真的被处置了。还有一步吗?

0 投票
2 回答
743 浏览

asp.net - autofac、ASP.NET 集成和 HttpRequestScoped

我之前在这里问过一个关于 autofac 在 HTTP 请求结束时不处理我的对象的问题。我现在认为我有一个更大的问题,因为有证据表明它正在提供 SAME 对象请求到请求。同样,我在这里使用他们的说明。我的测试有点复杂,因为我使用委托语法来创建一个对象,但我认为我将它标记为请求生命周期。全球.asax.cs:

我的意图是注册 IDBConnectionSelector 以获取使用自定义构造函数创建但具有 HTTP 请求范围的具体类型 CachingDBConnections。

CachingDBConnections 对象的某些方法在后续请求中失败,这让我相信我得到的是上次得到的相同方法,而不是每个请求的新方法。

那有意义吗?我究竟做错了什么?

0 投票
1 回答
3470 浏览

asp.net - Autofac、ASP.NET 和 Microsoft.Practices.ServiceLocation

我一直在研究在我的 Web 应用程序中实现 IoC 的细节,但以一种利用 Microsoft.Practices.ServiceLocation 的方式。我专门使用 Autofac 和 asp.net 集成,但我想让自己对其他容器开放。按照这个问题,我担心如何在我的网络应用程序代码中访问容器。

我有一个“核心”库,主要定义要解析的接口。我的网络应用程序和其他应用程序也使用这个核心库。定义通用接口非常方便。我认为这是一个访问 IoC 容器的好地方,我使用静态类做到了这一点。诀窍是将容器注入静态类。

在 Web 环境中这很棘手,因为每个请求的容器可能不同,而在非 Web 应用程序中,它可能一直都是相同的。起初我尝试使用一种方法直接注入容器,但在下一个 Web 请求中很快就失败了!所以我想出了这个:

现在在我的 global.asax.cs 我这样做:

解决依赖的呼吁看起来像

因此,我没有传递一个特定的容器,而是传递一个知道如何获取容器的委托。对于非 Web 应用程序,委托可能只会返回 builder.Build() 提供的内容。

我对专家的问题是,这有意义吗?我有一种简单的方法可以解决依赖关系,而无需知道容器产品是什么或容器本身来自何处。你怎么看?