dependency-injection 相关问题

一种设计模式,通过动态地向软件组件中注入需要运行的依赖项来减少组件之间的耦合。

解决Azure Service Fabric Stateless Service自身的依赖关系

我是 Service Fabric 的新手,正在使用下面的示例。 将 RegisterServiceAsync 与 new Service1(context) -> 结合使用将到达 Service1 的 RunAsync 方法。 将 RegisterServiceAsync 与我的

回答 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

AWS Lambda 依赖注入:无法动态创建“TestDep.Function”类型的实例。原因:没有定义无参构造函数

我正在尝试在我的 C# Dotnet 6 代码中使用依赖注入来部署到 AWS Lambda 函数。 我不断收到此错误: 无法动态创建“TestDep.Function”类型的实例。罗...

回答 2 投票 0

如何注册接口<type, type>

我正在尝试在我的 .Net 8 应用程序中设置依赖项注入,并希望它根据命名约定进行扫描和注册。我陷入困境的是我不知道如何注册 IFoo 我正在尝试在我的 .Net 8 应用程序中设置依赖项注入,并希望它根据命名约定进行扫描和注册。我陷入困境的是我不知道如何注册 IFoo<in T1, out T2> ,有人创建了它的实现来设置对象的自定义映射。具体实现继承自IFoo的接口。 这是迄今为止我的 DI 代码: public static void ConfigureServices(IServiceCollection services, Assembly assembly) { var types = assembly.GetTypes() .Where(t => t.GetInterfaces().Any(i => i.IsGenericType)).ToList(); foreach (var type in types) { var interfaces = type.GetInterfaces(); foreach (var @interface in interfaces) { // Register the interface mapping to the type in DI container services.AddTransient(@interface, type); // Register a factory for the Funcs services.AddTransient(typeof(Func<>).MakeGenericType(@interface), provider => new Func<object>(() => provider.GetService(@interface))); } } } 以下是如何设置课程的示例: public interface ISpecificFoo : IFoo<Member, SpecificFoo.Output> { } public class SpecificFoo : ISpecificFoo { public class Output { } } 到目前为止我遇到的错误是: System.ArgumentException:'无法实例化实现类型 'ISpecificFoo' 对于服务类型 'IFoo`2 您没有过滤掉接口类型,因此如果您有任何扩展 IFoo<in T1, out T2> 的接口(如 ISpecificFoo 所做的那样),那么它将被错误地注册为实现类型。 你可以这样做: var types = assembly .GetTypes() .Where(t => !t.IsAbstract) // Don't consider interfaces (or abstract classes). .Where(t => t.GetInterfaces().Any(i => i.IsGenericType)) .ToList(); 现在只有可实例化的类型才会被注册,例如SpecificFoo。 为了进一步限制这一点,您可以专门将 IFoo<in T1, out T2> 作为服务类型: var interfaces = type .GetInterfaces() .Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IFoo<,>));

回答 1 投票 0

错误状态:GetIt:类型为 <> 的对象/工厂未在 GetIt 内注册

我正在尝试将依赖注入与 get_it 包一起使用,以便进行单元测试。 我正在使用这些依赖项: 获取它:^7.6.0 可注入_生成器:^2.1.6 我的主要功能看起来像...

回答 2 投票 0

Symfony 将服务容器注入到学说连接包装器中

我尝试将symfony服务容器注入到dcotrine动态连接wrapper_class中 使用 Doctrine\DBAL\Connection; 类 DynamicConnection 扩展 Connection { 公共 $container;...

回答 2 投票 0

在 React Native 中使用 inversify 时如何避免服务定位器模式?

我正在尝试在使用函数式组件方法的 React Native 应用程序中使用 InversifyJS。我已配置好所有内容并按其应有的方式工作,但是,这是我可以的唯一方法

回答 1 投票 0

IwebHostEnvironment接口

我在代码中使用了 IwebHostEnvironment 。 IWebHostEnvironment 是一个接口,用于提供有关托管的信息并可以从中获取有关路径的数据 为什么我可以从中获取实例并注入...

回答 1 投票 0

C# .NET 依赖注入顺序澄清

在以下情况下我没有得到 DI 的行为。 使用 Microsoft.Extensions.Configuration; 使用 Microsoft.Extensions.DependencyInjection; 使用系统; 使用 Microsoft.Extensions.Azure; 使用

回答 1 投票 0

C# DOTNET 依赖注入顺序澄清

在以下情况下我没有得到 DI 的行为。 使用 Microsoft.Extensions.Configuration; 使用 Microsoft.Extensions.DependencyInjection; 使用系统; 使用 Microsoft.Extensions.Azure; 使用

回答 1 投票 0

如何使用.Net IO 类创建可测试代码?

我想创建可单元测试的代码来模拟对 .Net System.IO 类的调用,这样我就可以真正进行单元测试,而不是依赖于文件系统。 我正在使用 SystemWrapper 类...

回答 2 投票 0

将瞬态实例作为字典存储在单例实例中

我正在遵循现有的代码库试图理解 DI 生命周期,在下面的代码中,我们有一个注册为单例的 Factory 类,它从字典中返回一个实例...

回答 1 投票 0

依赖倒置原则。为什么我可以访问 ASP.NET 5 中非直接引用项目的类?

想象我的解决方案中有四个项目: 用户界面 <- startup project Domain Repository Boot The UI projects has dependencies to the Domain and Boot projects. The Boot project has dependencies to...

回答 1 投票 0

当注入类的属性在Python中发生变化时触发属性设置器

我有这个Python问题(为了示例而在此处进行了简化),其中我有2个类:一个子类(要注入)和一个父类。在父类中,我有一个属性

回答 1 投票 0

如何实现支持模板协变的泛型Factory?

我想实现这样的目标: std::shared_ptr> 工厂 = std::make_shared>(); 自动 x = 工厂->创建(arg1, arg2,...

回答 2 投票 0

尝试激活控制器时无法解析服务 DbContext

我有自己的DbContext: 公共类 DreamsContext :DbContext { 公共 DbSet UserAccounts { 获取;放; } 公共 DbSet DreamPublications { 获取;瑟...

回答 3 投票 0

Angular 14 中更简洁的抽象构造函数

我正在尝试按照本文扩展一个抽象类 - https://nartc.me/blog/inheritance-angular-inject/,但我坚持必须从注入上下文调用inject()错误。可以

回答 1 投票 0

将UserStore和UserManager注入到Controller中会抛出异常

我想要的只是将逻辑从剃刀页面/模型移动到控制器中,因为它破坏了我的项目的组织。我有一个派生自 IdentityUser 的类。 这意味着我...

回答 1 投票 0

sc.exe 启动后后台服务停止工作

我正在为后台服务编写代码,该代码旨在通过OPC UA协议收集数据。在我决定重构以符合现代模式 (DI) 之前,服务按预期工作。 乙...

回答 1 投票 0

BlazoredLocalStorage 偷偷注册失败?

我创建了一个 .NET8 Blazor 项目(客户端和服务器端),并为客户端添加了 Blazored.LocalStorage nuget 包。在 Program.cs 文件中,我添加服务注册行:

回答 1 投票 0

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