autofac 相关问题

Autofac(http://autofac.org)是Microsoft .NET的控件反转(IoC)容器。它管理类之间的依赖关系,以便应用程序随着大小和复杂性的增长而易于更改。这是通过将常规.NET类视为组件来实现的。

C# 来自继承的依赖注入

我之前看到过无需显式注入接口的实现,创建接口时可以简单地继承例如接口“IamContainerRegistered”并在comp...

回答 1 投票 0

服务未使用作为 Windows 服务运行的 Owin、SteelToe/Autofac 向 Eureka Server 注册

Web 服务未通过带有作为 Windows 服务运行的 Steeltoe/Autofac 库的 OWIN SelfHosted 控制台应用程序向 Eureka Server 注册。 //container.StartDiscoveryClient();是吗

回答 2 投票 0

如何将 Automapper 与 Autofac 一起使用

我已经升级到最新版本的AutoMapper(9.0)并将静态配置更改为: 公共静态 IMapper RegisterAutoMapper() { var config = new MapperConfiguration(cfg =>...

回答 4 投票 0

如何使用 Autofac 与 Winforms 来注入依赖项

我正在努力学习Autofac。我找不到 Winforms 的工作示例。在我的program.cs中我有这个: 公共静态 IContainer 容器 { 获取;私人套装; } /// /// 主要... 我正在尝试学习Autofac。我找不到 Winforms 的工作示例。在我的 program.cs 我有这个: public static IContainer Container { get; private set; } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] private static void Main() { var builder = new ContainerBuilder(); builder.Register(c => new MyContext()); Container = builder.Build(); ... using (var loginForm = new LoginForm(new MyContext())) { DialogResult results; do { results = loginForm.ShowDialog(); if (results == DialogResult.Cancel) Environment.Exit(1); } while (results != DialogResult.OK); UserName = loginForm.ValidatedUserName; } } MyContext() 是一个 DbContext。我想将 MyContext() 注入到我的 LoginForm() 中,但我还没有完全弄清楚。 LoginForm()的前几行: public partial class LoginForm : Form { private readonly MyContext _context; public LoginForm(MyContext context) { InitializeComponent(); _context = context; } ... } 如有任何建议,我们将不胜感激。 也注册表格: var builder = new ContainerBuilder(); builder.RegisterType<MyContext>(); builder.RegisterType<LoginForm>(); Container = builder.Build(); 然后从容器中解析表单: using (var loginForm = Container.Resolve<LoginForm>()) { DialogResult results; do { results = loginForm.ShowDialog(); if (results == DialogResult.Cancel) Environment.Exit(1); } while (results != DialogResult.OK); UserName = loginForm.ValidatedUserName; } 然后 MyContext 将在表单解析时自动注入。默认情况下,Autofac 注册注册为“self”(即它们可以解析为自己的类型)和“每个依赖项的实例”(每次解析时都会获得一个新的),因此您可以安全地保留 using在这种情况下。 免责声明:我以前没有使用过Autofac。 我的解决方案基于文档,您将需要更改: builder.Register(c => new MyContext()); 到 builder.Register(c => new MyContext()).AsSelf(); 这是为了让 Autofac 能够找到需要创建的依赖关系。 然后您需要更改: using (var loginForm = new LoginForm(new MyContext())) { ... } 成为: using (var scope = Container.BeginLifetimeScope()) { using (var loginForm = new LoginForm(scope.Resolve<MyContext>())) { ... } } 行 scope.Resolve<MyContext>() 将根据您注册的内容创建依赖项。 最佳实践是注册类及其使用服务类的形式。然后通过容器创建表单实例。通过这种方法,实现了依赖注入。 var builder = new ContainerBuilder(); builder.RegisterInstance(new AService()).As<IAService>(); builder.RegisterType<LoginForm>(); container = builder.Build(); using (var scope = container.BeginLifetimeScope()) { var loginForm= scope.Resolve<LoginForm>(); Application.Run(loginForm); }

回答 3 投票 0

在.Net 4.8中使用哪些版本的Autofac和Autofac.Mvc.5

我正在将 .Net 4.5.2 项目升级到 .Net 4.8。我们有以下内容: Autofac 4.81 Autofac.Mvc.5 4.02 .Net 4.8 应该使用每个版本的哪个版本? 问候, 保罗

回答 1 投票 0

Autofac 6 - 注册装饰器同时实现另一个接口

在 Autofac 6 之前,我可以这样做: builder.RegisterType() .As(new DecoratorService(typeof(IResourceStorage))) .As<

回答 2 投票 0

如何在Web API中使用AutoFac在运行时解析服务?

我有一个API(例如:ItemController.cs),它可以在运行时从请求标头获取授权令牌。有了令牌,只有我传入我的服务类(例如:ServiceItem.cs)。 哈...

回答 1 投票 0

Autofac:注册Singleton和InstancePerDependency依赖关系

我在 .NET 应用程序中使用 Autofac 进行依赖项注入。我有一个场景,我想将服务注册为单例,并将其依赖项注册为 InstancePerDependency。这是一个简化的

回答 1 投票 0

Autofac 拥有<>

我不太明白Autofac拥有和非拥有的一次性组件之间的区别。 接口 IMessageHandler { 无效句柄(消息消息); } 消息泵类 { 功能 我不太明白 Autofac 自有和非自有一次性组件之间的区别。 interface IMessageHandler { void Handle(Message message); } class MessagePump { Func<Owned<IMessageHandler>> _handlerFactory; public MessagePump(Func<Owned<IMessageHandler>> handlerFactory) { _handlerFactory = handlerFactory; } public void Go() { while (true) { var message = NextMessage(); using (var handler = _handlerFactory()) { handler.Value.Handle(message); } } } } 上面的代码与下面的代码有什么区别: class MessagePump { IMessageHandler _handler; public MessagePump(IMessageHandler handler) { _handler = handler; } public void Go() { while (true) { var message = NextMessage(); _handler.Handle(message); } } } 都是我选择的时候手动处理的,那有什么区别呢? 区别在于,如果不使用 Owned,则不会为 T 及其依赖项创建嵌套的生命周期作用域。如果您手动处置实例,您将不会处置任何注册为 InstancePerLifetimeScope 的依赖项,因为它们现在与您的 MessagePump 位于相同的生命周期范围内。 例如,如果您的处理程序本身依赖于数据库资源,那么一般的想法是您希望它们与您的处理程序一起使用,而不是与我认为长期存在的消息泵一起使用。 使用 Owned<T> 通知 Autofac 您不希望 Autofac 处理您的依赖项,因为您要自己处理。然后 - 您可以/应该使用 using 语句或直接在代码中调用 Dispose() 来处理依赖关系,Dispose() 不会被自动调用。 当你不打算使用 Owned<T> 依赖项时,你不需要自己处理你的依赖项 - Autofac 会在必要时为你做这件事。您不必使用 using 语句,您不必记住依赖项是否是一次性的。

回答 2 投票 0

通过带有 autofac 的单例服务中的委托工厂来确定范围服务

我在 Autofac 中发现了一些与通过委托工厂从单例服务中解析范围服务相关的意外行为。以下行为是预期的还是我误解了

回答 1 投票 0

未找到“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数

当我尝试使用 Xml 配置设置参数时,出现以下错误: 在类型上未找到带有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数 '...

回答 5 投票 0

如何使用Autofac实现责任链设计模式

我正在尝试使用 Autofac 来实现责任链设计模式,以连接所有内容以进行依赖注入。当我运行示例项目时,我从 Autofac 收到一条消息,指出

回答 1 投票 0

如何捕获控制器激活器异常以记录它们?

我有一个 asp.net Framework 4.8 WebApi2 项目,当我向给定控制器上的操作发送请求时,我收到 500 错误,内容显示这是由于缺少依赖项所致。非常正确,...

回答 1 投票 0

autofac - 无法将 EnableClassInterceptors 与表达式注册或 lambda 注册技术一起使用

以下是我的服务正常注册线路,到目前为止一切正常。我必须使用 EnableClassInterceptors,但由于提供的原因,我无法使用 EnableInterfaceInterceptors...

回答 1 投票 0

替换 Autofac 中的注册

我有一个进行数据处理的应用程序。有 类管道{ IEnumerable 过滤器 {get;放;} 我将过滤器实现注册为 builder.RegisterType<

回答 3 投票 0

使用 autofac 获取所有 IOptions 对象的集合

我希望能够获取在 autofac 中注册的所有 IOptions 的集合,以便我可以将它们保存到自定义 JSON 文件中。就像是: 类选项管理器(IEnumerable IOptions) 我会...

回答 1 投票 0

Hangfire & Autofac.Core.Registration.ComponentNotRegisteredException:请求的服务尚未注册

我正在尝试设置 Hangfire 来定期执行服务中的方法。 然而,AutoFac 抱怨该服务未注册: 程序.cs var serviceCollection = 新

回答 1 投票 0

如何替换Autofac中的IServiceCollection扩展方法?

我正在使用 ASP.Net Core 2.1 构建一个应用程序,并使用 autofac 而不是内置 DI 容器。 现在我有一个疑问:如果我有一个为 IServiceCollec 提供扩展方法的库...

回答 1 投票 0

Azure 表和 EntityFrameworkCore InMemoryDb 的 Autofac 依赖注入

我构建了一个与 Azure 表存储表和 EntityFrameworkCore InMemory 数据库通信的服务类。 公共密封类NotificationService:INotificationService {...

回答 1 投票 0

Autofac 时间驱动的[标记]范围

我正在寻找一种单例作用域,它会在配置的时间间隔内自动配置自身。 尝试使用池化实例,但缺乏清除缓存的 API。 这样的范围存在吗?什么是...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.