问题标签 [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 投票
8 回答
15625 浏览

wpf - WPF 应用程序是否可以进行依赖注入?

我想开始在我的 WPF 应用程序中使用依赖注入,主要是为了更好的单元可测试性。我的应用程序主要是按照 MV-VM 模式构建的。我正在为我的 IoC 容器寻找Autofac,但我认为这对这个讨论没有太大影响。

将服务注入启动窗口似乎很简单,因为我可以在 App.xaml.cs 中创建容器并从中解析。

我正在苦苦挣扎的是如何将 DI ViewModels 和服务转换为用户控件?用户控件是通过 XAML 标记实例化的,因此它们没有机会Resolve()

我能想到的最好的办法是将容器放在单例中,并让用户控件从全局容器中解析他们的 ViewModel。充其量,这感觉像是一个半途而废的解决方案,因为它仍然需要我的组件依赖于 ServiceLocator。

使用 WPF 可以实现完整的 IoC 吗?

[编辑] - 有人建议使用 Prism,但即使评估 Prism 似乎也是一项巨大的投资。我希望有更小的东西。

[编辑] 这是我停止的代码片段

0 投票
1 回答
3521 浏览

asp.net-mvc - 如何在 3 层 Web 应用程序(ASP.NET MVC)中使用 Autofac?

我可以找到的示例使用两层架构,其中控制器直接使用数据访问层中的存储库类。见这里这里

如果您有使用这些组件的服务或业务逻辑层,您会在哪里注册数据访问层的组件?理想情况下,不应从用户界面层引用数据访问层,对吗?所以 Application_Start 不是正确的地方。

有什么更好的方法?

谢谢!

0 投票
1 回答
1534 浏览

asp.net-mvc - 如何使用 Autofac 确保每个请求都有一个 NHibernate ISession?

我在 Application_Start 方法中使用的 Autofac 模块中有以下代码:

存储库的构造函数将 ISession 作为参数。但是我最终得到了整个应用程序的一个会话,即使我明确要求它是 HttpRequestScoped。

我已经配置了 ContainerDisposal HTTP 模块。

根据文档,您必须创建一个嵌套容器,但我让 Autofac 自动装配依赖项。

我该怎么办?

谢谢!

0 投票
2 回答
2086 浏览

asp.net - 将 Autofac 与 ASP.NET 和 MVP 模式一起使用

我正在尝试将 Autofac 集成到现有的 ASP.NET Web 应用程序中。

这些页面遵循 MVP 模式。每个页面都实现一个 View 并将功能委托给 Presenter。View 通过构造函数注入到 Presenter 中。

我能够注册演示者和视图并且页面加载正常,但是当回发发生时,视图上的用户控件为空。似乎 Autofac 创建了一个新的 Page 实例来提供给演示者,而不是给它实例真正的 Page 实例。有没有办法让页面实例注册到 Autofac?

有没有人将 Autofac 与 ASP.NET 和 MVP 一起使用?

谢谢!

0 投票
2 回答
2192 浏览

autofac - Autofac参数传递

我一直在尝试集成最新版本的 autofac (1.3.3.54),但遇到了以下问题。

根据项目的 Google 代码 wiki,在注册回调中使用参数的推荐方式如下:

builder.Register((c, p) => new Foo(p.Get("arg1")));

但是,这不会与提到的 autofac 代码版本一起编译。我查看了源代码,发现 p 是一个 IEnumerable (ComponentActivatorWithParameters)。相对于文档,代码是否已过时?

0 投票
1 回答
1320 浏览

c# - 在给定的场景中使用 ninject/autofac

我有一些提供者,比如说 -

这些提供商中的每一个都可以给我一个会话:

目前,我通过查看提供者、实例化类型和注入 URL(手动)来实例化“命名”会话。

我可以使用会话工厂,它可能必须理解 url 并返回正确的会话。

有没有办法用 ninject/autofac 更优雅/更简单地处理这个问题?

0 投票
2 回答
17460 浏览

c# - 如何使用 MySQL 配置流畅的 nHibernate

我正在尝试将 nHibernate 配置为使用 MySql 数据库。我找到了 mssql 和 sqlite 的示例,但没有找到 mysql 的示例。那么,我该如何更改它以使其使用 mysql:

0 投票
5 回答
9664 浏览

asp.net - Web应用程序中的Autofac,我应该将容器存储在哪里以便于访问?

我对使用 Autofac 还是很陌生,我在文档和示例中错过的一件事是如何轻松地从 Web 应用程序的不同位置访问配置的容器。

我知道我可以使用 Autofac 控制器工厂来自动解析控制器的构造函数注入依赖项,但是您可能需要解决尚未注入的其他内容呢?

有没有我不知道的明显模式?

谢谢!

0 投票
3 回答
11690 浏览

inversion-of-control - 使用 Autofac 有什么优点和缺点

我读过 Autofac 说它很快。我看过所涉及的编码,它非常整洁。但我不太确定如何使用它。我用过 StructureMap,它有一个静态的 ObjectFactory。Ninject 有内核,但在 Autofac 的 Google 页面中,他们建议这样做:

这是一个 WinForms 应用程序,所以我从上面的操作中得到了一个无效的对象状态,所以我切换到了一个全局 IContainer,并这样做了

我已经使用了大约 3 或 5 次。但这有效吗?还是我应该做类似的事情

并在幕后

你会使用哪个,为什么?使用 CreateInnerContainer() 也会受到惩罚吗?

0 投票
2 回答
2707 浏览

c# - 跟踪 WPF 中的内存泄漏

背景:我们正在构建一个快速交付 WPF 应用程序的框架。该框架使用 Autofac 作为 IoC 容器,还使用 ​​Prism v1 中的区域。我们正在使用 Microsoft 的并行扩展来安排任务。

我们面临以下问题:当我们用空视图启动应用程序时(所以只是一个带有区域和占位符控件的外壳),内存将保持稳定约 60 秒,之后它将每秒增加 4kb,然后是 4kb ,在那之后的8kb。因此,每 3 秒我们就会增加 16Kb 的内存压力。

我们试图追踪泄漏的原因是什么。我开始使用 dotTrace,但我看不出相隔 30 分钟拍摄的 2 个快照之间有任何区别。继续使用 .NET 内存分析器,因为它为我提供了更多信息,但我们再次看不到 2 个快照之间的任何差异。我们可以看到创建了许多对象,但它们也被删除了,导致 delta 为 0。所以我继续使用 windbg,但结果是一样的。

另一个奇怪的事情是,当我们启动 sysinternals dbgvw 时,我们看不到在我们的应用程序中进行任何调用。

您对我们下一步可能尝试找出什么/谁是罪魁祸首有什么建议吗?