Autofac(http://autofac.org)是Microsoft .NET的控件反转(IoC)容器。它管理类之间的依赖关系,以便应用程序随着大小和复杂性的增长而易于更改。这是通过将常规.NET类视为组件来实现的。
我正在寻找一种单例作用域,它会在配置的时间间隔内自动配置自身。 尝试使用池化实例,但缺乏清除缓存的 API。 这样的范围存在吗?什么是...
注册委托时假设 Autofac LifetimeScope 是什么?
我无法从文档中确定这一点。 给定一个注册: builder.RegisterType().As().InstancePerLifetimeScope(); 什么一生...
使用“WithParameters”Autofac 注入失败
我正在尝试注册我创建的一些端点,但是,Autofac 抛出异常,说我尚未注册我的 BControl 类。这是我的注册码: builder.RegisterType<
PublishTrimmed 使用 Autofac 程序集扫描
我为我的 C# .NET 6 控制台应用程序启用了 。它使用 Autofac 来注册类型。在某些情况下,我会扫描当前应用程序以查找实现接口的类,如下所示: //
使用 IServiceProvider.GetRequiredService 对方法进行单元测试会抛出“未注册类型‘<T>’的服务”
我有一个类,它在构造函数中将 IServiceProvider 作为参数,并在 Get() 方法中使用 IServiceProvider.GetRequiredService 返回一个对象。当对这个方法进行单元测试时看看
我有一个配置如下的消费者 .ConfigureServices((hostContext, 服务) => { 服务.AddMassTransit(cfg => { cfg.AddConsumer (); ...
ExternallyOwned() 在程序集扫描级别不起作用?
我在Assembly AutofacDotMemory中有以下类 公共接口 IOutput:IDisposable { void Write(字符串内容); } 公共类ConsoleOutput:IOutput { 公共无效Wr...
.NET 6 API 系统.InvalidOperationException
我在一堂课上有这样的 Autofac 模块; 公共类 AutofacBusinessModule:模块 { protected override void Load(ContainerBuilder构建器) { builder.RegisterType 我在一堂课上有这样的 Autofac 模块; public class AutofacBusinessModule:Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<ProductManager>().As<IProductService>(); builder.RegisterType<EfProductDal>().As<IProductDal>(); builder.RegisterType<CategoryManager>().As<ICategoryService>(); builder.RegisterType<EfCategoryDal>().As<ICategoryDal>(); builder.RegisterType<CustomerManager>().As<ICustomerService>(); builder.RegisterType<EfCustomerDal>().As<ICustomerDal>(); builder.RegisterType<RegionManager>().As<IRegionService>(); builder.RegisterType<EfRegionDal>().As<IRegionDal>(); builder.RegisterType<TerritoryManager>().As<ITerritoryService>(); builder.RegisterType<EfTerritoryDal>().As<ITerritoryDal>(); builder.RegisterType<ShipperManager>().As<IShipperService>(); builder.RegisterType<EfShipperDal>().As<IShipperDal>(); builder.RegisterType<EmployeeManager>().As<IEmployeeDal>(); builder.RegisterType<EfEmployeeDal>().As<IEmployeeDal>(); var assembly = System.Reflection.Assembly.GetExecutingAssembly(); builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces() .EnableInterfaceInterceptors(new ProxyGenerationOptions() { Selector = new AspectInterceptorSelector() }).SingleInstance(); } 我的 API 代码就在那里; [Route("api/[controller]")] [ApiController] public class ProductsController : Controller { private readonly IProductService _productService; public ProductsController(IProductService productService) { _productService = productService; } [HttpGet("getall")] public IActionResult GetAllProducts() { var result = _productService.GetAll(); if (result.Success) { return Ok(result); } return BadRequest(result); } } } 我将其添加到program.cs上,但不起作用,如果较低,我使用.net 6,我会像这样修复它,但我不知道如何修复.net 6,因为启动不再存在。 IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureContainer<ContainerBuilder>(builder => { builder.RegisterModule(new AutofacBusinessModule()); }); 我该如何解决这个问题? 它给了我这个错误 System.InvalidOperationException:尝试激活“TAO.WebApi.Controllers.ProductsController”时无法解析类型“TAO.Business.Abstract.IProductService”的服务。 在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp,类型 type,类型 requiredBy,布尔 isDefaultParameterRequired) 在 lambda_method3( 闭包 , IServiceProvider , Object[] ) 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass7_0.b__0(ControllerContext controllerContext) 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext) 在 Microsoft.AspNetCore.Mvc.Infrastruct.ControllerActionInvoker.Next(状态&下一个,范围&范围,对象&状态,布尔& isCompleted) 在 Microsoft.AspNetCore.Mvc.Infrastruct.ControllerActionInvoker.InvokeInnerFilterAsync() --- 先前位置的堆栈跟踪结束 --- 在 Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|20_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、范围范围、对象状态、布尔值已完成) 在 Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围) 在 Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围) 在 Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(端点端点、任务 requestTask、ILogger 记录器) 在 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext 上下文) 在 Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) 在 Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext,ISwaggerProvider swaggerProvider) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文) HEADERS ======= Accept: */* Connection: keep-alive Host: localhost:7019 User-Agent: PostmanRuntime/7.30.0 Accept-Encoding: gzip, deflate, br Postman-Token: fbff062e-ca49-4f37-afc5-e8785afbd43c 尝试使用迁移文档中的以下代码: builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); // Register services directly with Autofac here. Don't // call builder.Populate(), that happens in AutofacServiceProviderFactory. builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutofacBusinessModule())); 请注意,“旧”通用托管模型在 .NET 6 中仍然有效,不需要使用新的最小托管模型(但您不仅需要将 CreateHostBuilder 方法,还需要将旧 Program.Main 的内容复制到新的 Program 顶级语句文件)。
Autofac - ASP.NET Core 中操作过滤器中的属性注入
在使用 ASP.NET Web API 2 编写应用程序时,我成功地使用 Autofac 在过滤器级别实现了属性注入。 (下面的示例属于非核心 ASP.NET Web API) builder.Register(x =&...
我在AutoFac中使用动态实例化: 公开课X:I_X { 公共X(字符串p1,字符串p2) { ... } } 公共A类:I_A { 公共A(功能 我在 AutoFac 中使用动态实例化: public class X: I_X { public X(String p1, String p2) { ... } } public class A: I_A { public A(Func<String, String, I_X> x_Factory) { I_X my_x = x_Factory("one", "two"); ... } } Autofac 按预期解决了这个问题。 但是假设我要在一个 DLL 中使用此代码,该代码也被其他没有 AutoFac 支持的项目并行使用:我需要如何为“A”的构造函数准备参数“x_Factory”并传递它,以便它可以工作? var manual_x_Fac = <what has to be done?> var a_object = new A(manual_x_Fac) 如果有人能帮助我,我会很高兴。谢谢你 您只需创建一个函数,例如使用 lambda 表达式: var manual_x_Fac = (string s, string s1) => new X(s, s1); var a_object = new A(manual_x_Fac); 如果内联参数,那就更方便了: var a_object = new A((s, s1) => new X(s, s1));
如何在 Mediatr 中为所有请求定义一个特定的异常处理程序
我在 ASP.NET core 项目中使用 Mediatr 来处理所有请求。我实现了几个请求/响应/处理程序。他们每个人都可以抛出一个特定的异常,我们称之为“MyExceptio...
AutoFac - 在 app_start 上初始化重量级单例
我们的配置是,MVC5 C# 应用程序,使用 AutoFac。 我们有许多单例,如果它们使用第一个请求进行初始化,则会给用户带来不好的体验,因为它们的首字母...
我正在开发 Windows Phone 8.1 应用程序,并且我有一个具有公共属性的基类。 公共类 ViewModelBase { 公共 ISomeClass MyProp {get;set;} } 我的派生类看起来像这样
我正在寻找以下问题的可能解决方案。 我有一个基类,它具有一个依赖项,我目前使用属性注入来满足该依赖项。 公共类基类{ IService SomeServ...
ASP.NET Core 中集成的依赖注入可以扫描模块的依赖关系吗?
我有一个主要的 ASP.NET Core Web Api 项目,它消耗多个项目,但我遵循 Clean Architecture,所有接口都放在一个核心项目中,有模块项目(基础设施)
我正在开发一个 ASP.NET 项目,使用 .NET 6、用于依赖项注入的 Autofac 和用于对象映射的 AutoMapper。在我的项目中,我有两个服务,A和B,每个服务都需要自己的Auto...
我正在开发一个wcf项目并使用autofac,它正在工作。 但是,我的要求是我将在不同的系统上部署此服务,并且它需要使用预...
Autofac 无法解析类型“log4net.ILog”的服务
我有 ASP.NET MVC 应用程序,它工作正常,但是一旦我升级了 Autofac 并对 Log4Net 中间件示例进行了更改,如果我尝试解析 ILog,它就会不断失败。 我们使用 FluentMigrator,我是
Azure Function 中的 Autofac 依赖注入
我正在尝试在Azure功能中使用Autofac IOC来实现DI。 我需要构建容器,但不确定将构建容器的代码放在哪里
“链接全部”时 Xamarin Forms iOS NoConstructorFoundException 与 AutoFac,以及“不链接”时的无限构建
在物理 iPhone 上构建和部署适用于 iOS 的 Xamarin Forms 应用程序时,我遇到了一个令人困惑的问题。该应用程序在 Android 上成功构建和部署,它也适用于 iOS 模拟器...