问题标签 [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 回答
3424 浏览

asp.net-mvc - 如何使用 Autofac 将控制器的 ModelState 传递给我的服务构造函数?

我在 ModelStateDictionary 上有一个我的所有服务都接受的包装器。是否可以配置 autofac 将控制器 ModelStateDictionary 注入包装器的构造函数,然后将其注入服务构造函数?

谢谢

0 投票
2 回答
1629 浏览

c# - Presenter 的依赖注入

我有一个 Presenter,它在其构造函数中将 Service 和 View Contract 作为参数:

我用 Autofac 解决了我的服务:

在我的 ASPX 页面(查看实现)中:

问题是 FooPresenter 的构造函数需要特定的页面,而不是容器创建新页面。

我可以为容器提供视图的特定实例(当前页面)以实现此分辨率吗?这样做有意义吗,还是我应该以另一种方式这样做?

0 投票
1 回答
1259 浏览

c# - IOC/Autofac 容器

我目前正在使用 Autofac,但也愿意对其他 IOC 容器发表评论。如果可能的话,我更喜欢使用 Autofac 的解决方案。我对 IOC 也有些陌生,所以我可能会严重误解我应该使用 IOC 容器做什么。

基本上,情况如下:

我的应用程序有一个最顶层的 IOC 容器。我有一个子容器/范围树,我希望相同的“服务”(IWhatever)根据树中的哪个级别解决不同的问题。此外,如果服务未在树中的某个级别注册,我希望树向上横向直到找到合适的实现。

此外,在构建给定组件时,我很可能需要访问父容器/范围。在许多情况下,我正在注册的组件将依赖于父作用域中的相同或不同服务。

有没有办法用 Autofac 表达这种依赖关系?就像是:

由于以下几个原因,我无法获得类似于上述伪代码的任何东西:

A)似乎范围树中的所有级别都共享一组共同的注册。我似乎无法找到将给定注册限制在某个“范围”的方法。

B)我似乎无法找到一种方法来获取给定范围的父范围。我可以在容器中解析 ILifetimeScope,然后将其转换为提供其父范围的具体 LifetimeScope 实例,但我猜它可能是要以这种方式使用的注释。这安全吗?

C)我不确定如何告诉 Autofac 哪个容器拥有已解析的对象。对于许多组件,我希望组件由其构建的范围“拥有”。标记的上下文可以在这里帮助我吗?我必须用唯一的标签标记树的每一层吗?这会很困难,因为树的深度是在运行时确定的。

很抱歉这个非常冗长的问题。总之:

1) 有什么方法可以使用 Autofac 做我想做的事吗?

2)是否有另一个容器更适合这种依赖结构?

3)国际奥委会是完全错误的工具吗?

0 投票
2 回答
898 浏览

c# - 使用 DI 框架处理多个配置文件的良好实践

在我当前的解决方案中,我有 18 个项目,其中大多数都有自己的配置文件(app.config 或 web.config)。每个项目使用单个共享 BLL 程序集。我正在使用 Autofac 来处理依赖关系,但没有提供一种很好的方式来管理我的配置。配置项大致相同,但值不同。有些项目使用自定义配置部分,有些则没有。

我最终得到:

  1. 创建单个 autofac 引导程序类来注册配置文件包装器之外的所有依赖项。
  2. 使用 IConfiguration 接口创建单独的程序集(由所有项目引用)。
  3. 创建每个项目自己的 IConfiguration 实现。
  4. 通过共享引导程序在每个项目的适当位置引导依赖项。
  5. 在引导注册后单独注册项目自己的 IConfiguration 实现。

总的来说,我对 Autofac 和 DI 非常陌生,并努力在复杂性和可扩展性之间找到一个很好的平衡点。

有没有更好的方法来管理配置文件?

谢谢你。

0 投票
2 回答
378 浏览

asp.net-mvc - Autofac 不喜欢 MVC 源

我将 ASP.NET MVC 2 RC2 源代码添加到我的解决方案中(使用这些说明:http: //blog.stevensanderson.com/2009/02/03/using-the-aspnet-mvc-source-code-to-debug -your-app/),但现在由于 Autofac 的错误而无法构建。

对 MVC 版本 1 的引用让我特别困惑。甚至在我添加 MVC 源代码之前,我使用的是 MVC 2(来自二进制文件)并且 Autofac 没有抱怨。

0 投票
3 回答
4887 浏览

c# - Autofac:如何在不传递 IoC 容器的情况下限制 IDisposable 对象的生命周期

我目前正在学习如何使用 Autofac,并且我一直坚持IDisposable确定性地处理对象。在我陈述我的问题之前,让我先介绍一下情况。

起始位置:

假设我的对象模型是通过以下接口定义的:

此外,我定义了一个将用作IApple工厂的委托:

Autofac配置:

现在,我将按如下方式注册上述类型 - 请注意,我省略了两个类的代码AppleHorse,因为它们实现起来很简单:

我的问题:

我不太清楚如何实现方法IHorseKeeper.Feed。这是我目前拥有的:

这是我想要的那种代码,因为它完全与 Autofac 无关。只要AppleFactory按预期工作,它也可以与另一个 IoC 容器一起工作。

然而,因为 AutofacAppleFactory为我处理,它会跟踪它为我生成的所有对象,因此在容器的生命周期结束时会自己IApple想要它们。Dispose即,生产的产品apple将被处理两次。

我认为注册IApple.ExternallyOwned()不是可行的解决方案,因为在某些情况下,让 Autofac 处理IApples 的生命周期可能更容易。

使用 Autofac 进行确定性处理需要使用创建嵌套容器container.BeginLifetimeScope(),但是我不想在内部使用它,HorseKeeper.FeedHorse因为那样HorseKeeper会依赖于 Autofac,并且我想保持我的代码与 IoC 无关。

问题:

如何HorseKeeper.FeedHorse以与 IoC (Autofac) 无关的方式实现,同时确保正确处理动态生成的对象?

0 投票
2 回答
387 浏览

documentation - 可打印的autofac文档?

我似乎找不到任何关于 AutoFac 的可打印内容

0 投票
1 回答
4984 浏览

inversion-of-control - 如何使用 autofac 进行自定义初始化

我正在将 autofac 添加到现有项目中,并且某些服务实现需要调用它们的 Initialize 方法并传递配置信息。目前我正在使用代码:

这可行,但我仍在自己创建对象,这是我试图摆脱这种情况并允许 autofac 为我处理它。是否可以配置执行自定义初始化的创建后操作?

为了让您了解我理想的情况,这将是代码:

更新:我正在使用 Autofac-2.1.10.754-NET35

0 投票
1 回答
1142 浏览

autofac - 在 Autofac 2.1.10 RC 中注册集合

我正在将代码从 Autofac 1.4 升级到 2.1.10 Release Candidate。

我的模块以前执行过这样的注册:

现在,RegisterCollection没有无参数重载。我不在乎给它命名。假设直接传入就可以了null,我的代码在 2.1 中是这样的:

但是,当我编译时,我收到以下错误.MemberOf

使用通用方法 'Autofac.RegistrationExtensions.MemberOf(Autofac.Builder.RegistrationBuilder, string)' 需要 '3' 类型参数

我尝试输入一个集合名称而不是 null,以防万一,但没有效果。

在 2.1 中注册集合的正确方法是什么?

0 投票
2 回答
2444 浏览

asp.net-mvc - 自定义 Autofac 控制器注册

我正在尝试使用 Autofac 和 Autofac.Integrations.Web 来注册 ASP.NET MVC 控制器。我目前正在使用程序集扫描来查找控制器,但其中一个需要一个我更愿意传入的特殊参数。下面是我尝试过的注册。

感谢您的帮助。