问题标签 [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.
asp.net-mvc - 如何使用 Autofac 将控制器的 ModelState 传递给我的服务构造函数?
我在 ModelStateDictionary 上有一个我的所有服务都接受的包装器。是否可以配置 autofac 将控制器 ModelStateDictionary 注入包装器的构造函数,然后将其注入服务构造函数?
谢谢
c# - Presenter 的依赖注入
我有一个 Presenter,它在其构造函数中将 Service 和 View Contract 作为参数:
我用 Autofac 解决了我的服务:
在我的 ASPX 页面(查看实现)中:
问题是 FooPresenter 的构造函数需要特定的页面,而不是容器创建新页面。
我可以为容器提供视图的特定实例(当前页面)以实现此分辨率吗?这样做有意义吗,还是我应该以另一种方式这样做?
c# - IOC/Autofac 容器
我目前正在使用 Autofac,但也愿意对其他 IOC 容器发表评论。如果可能的话,我更喜欢使用 Autofac 的解决方案。我对 IOC 也有些陌生,所以我可能会严重误解我应该使用 IOC 容器做什么。
基本上,情况如下:
我的应用程序有一个最顶层的 IOC 容器。我有一个子容器/范围树,我希望相同的“服务”(IWhatever)根据树中的哪个级别解决不同的问题。此外,如果服务未在树中的某个级别注册,我希望树向上横向直到找到合适的实现。
此外,在构建给定组件时,我很可能需要访问父容器/范围。在许多情况下,我正在注册的组件将依赖于父作用域中的相同或不同服务。
有没有办法用 Autofac 表达这种依赖关系?就像是:
由于以下几个原因,我无法获得类似于上述伪代码的任何东西:
A)似乎范围树中的所有级别都共享一组共同的注册。我似乎无法找到将给定注册限制在某个“范围”的方法。
B)我似乎无法找到一种方法来获取给定范围的父范围。我可以在容器中解析 ILifetimeScope,然后将其转换为提供其父范围的具体 LifetimeScope 实例,但我猜它可能是要以这种方式使用的注释。这安全吗?
C)我不确定如何告诉 Autofac 哪个容器拥有已解析的对象。对于许多组件,我希望组件由其构建的范围“拥有”。标记的上下文可以在这里帮助我吗?我必须用唯一的标签标记树的每一层吗?这会很困难,因为树的深度是在运行时确定的。
很抱歉这个非常冗长的问题。总之:
1) 有什么方法可以使用 Autofac 做我想做的事吗?
2)是否有另一个容器更适合这种依赖结构?
3)国际奥委会是完全错误的工具吗?
c# - 使用 DI 框架处理多个配置文件的良好实践
在我当前的解决方案中,我有 18 个项目,其中大多数都有自己的配置文件(app.config 或 web.config)。每个项目使用单个共享 BLL 程序集。我正在使用 Autofac 来处理依赖关系,但没有提供一种很好的方式来管理我的配置。配置项大致相同,但值不同。有些项目使用自定义配置部分,有些则没有。
我最终得到:
- 创建单个 autofac 引导程序类来注册除配置文件包装器之外的所有依赖项。
- 使用 IConfiguration 接口创建单独的程序集(由所有项目引用)。
- 创建每个项目自己的 IConfiguration 实现。
- 通过共享引导程序在每个项目的适当位置引导依赖项。
- 在引导注册后单独注册项目自己的 IConfiguration 实现。
总的来说,我对 Autofac 和 DI 非常陌生,并努力在复杂性和可扩展性之间找到一个很好的平衡点。
有没有更好的方法来管理配置文件?
谢谢你。
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 没有抱怨。
c# - Autofac:如何在不传递 IoC 容器的情况下限制 IDisposable 对象的生命周期
我目前正在学习如何使用 Autofac,并且我一直坚持IDisposable
确定性地处理对象。在我陈述我的问题之前,让我先介绍一下情况。
起始位置:
假设我的对象模型是通过以下接口定义的:
此外,我定义了一个将用作IApple
工厂的委托:
Autofac配置:
现在,我将按如下方式注册上述类型 - 请注意,我省略了两个类的代码Apple
和Horse
,因为它们实现起来很简单:
我的问题:
我不太清楚如何实现方法IHorseKeeper.Feed
。这是我目前拥有的:
这是我想要的那种代码,因为它完全与 Autofac 无关。只要AppleFactory
按预期工作,它也可以与另一个 IoC 容器一起工作。
然而,因为 AutofacAppleFactory
为我处理,它会跟踪它为我生成的所有对象,因此在容器的生命周期结束时会自己IApple
想要它们。Dispose
即,生产的产品apple
将被处理两次。
我认为注册IApple
为.ExternallyOwned()
不是可行的解决方案,因为在某些情况下,让 Autofac 处理IApple
s 的生命周期可能更容易。
使用 Autofac 进行确定性处理需要使用创建嵌套容器container.BeginLifetimeScope()
,但是我不想在内部使用它,HorseKeeper.FeedHorse
因为那样HorseKeeper
会依赖于 Autofac,并且我想保持我的代码与 IoC 无关。
问题:
如何HorseKeeper.FeedHorse
以与 IoC (Autofac) 无关的方式实现,同时确保正确处理动态生成的对象?
documentation - 可打印的autofac文档?
我似乎找不到任何关于 AutoFac 的可打印内容
inversion-of-control - 如何使用 autofac 进行自定义初始化
我正在将 autofac 添加到现有项目中,并且某些服务实现需要调用它们的 Initialize 方法并传递配置信息。目前我正在使用代码:
这可行,但我仍在自己创建对象,这是我试图摆脱这种情况并允许 autofac 为我处理它。是否可以配置执行自定义初始化的创建后操作?
为了让您了解我理想的情况,这将是代码:
更新:我正在使用 Autofac-2.1.10.754-NET35
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 中注册集合的正确方法是什么?
asp.net-mvc - 自定义 Autofac 控制器注册
我正在尝试使用 Autofac 和 Autofac.Integrations.Web 来注册 ASP.NET MVC 控制器。我目前正在使用程序集扫描来查找控制器,但其中一个需要一个我更愿意传入的特殊参数。下面是我尝试过的注册。
感谢您的帮助。