Autofac(http://autofac.org)是Microsoft .NET的控件反转(IoC)容器。它管理类之间的依赖关系,以便应用程序随着大小和复杂性的增长而易于更改。这是通过将常规.NET类视为组件来实现的。
我有一个配置如下的消费者 .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 模拟器...
我正在尝试提炼这个(以及更多): builder.RegisterType>.AsImplementedInterfaces(); builder.RegisterType>.
我决定在我的 Azure Function 应用程序中使用 MediatR。我在我的 Azure Function 项目中下载了 MediatR v12.1.1。我有依赖项目(类库)和名称服务,我有查询(其中
AutoMock CreateInstance 要模拟的类型必须是接口、委托或非密封、非静态类
在嘲笑“autoMocker.CreateInstance();”时,我收到下面的通用消息与 Moq.AutoMock.Automocker。 HeliumController 类的构造函数需要几个
当构造函数需要`Func<string>`时,无法从autofac解析实例
我正在尝试从 autofac 解析一个实例,它需要 Func 作为构造函数参数。 构造函数: 公共 GitRepositoryFactory( IgitCommands gitCommands,...
如何在 ContainerBuilder.RegisterAssemblyTypes 上使用 orderby?
我有 2 个服务类,均以 Service 结尾: TurnoverGroupWebService 和 CashregisterTurnoverGroupWebService。 这两个类应该自动注册为