You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Unity中使用InjectionFactory?多实例注入如何区分?

Unity依赖注入:重复注册接口的行为与多实例实现

你当前代码的问题

你两次对ISomeInterface进行无命名的InjectionFactory注册,Unity的核心规则是后注册的会完全覆盖前一个。也就是说,后续任何解析ISomeInterface的操作,都会调用最后一次注册的工厂方法,创建传入param2的SomeConcreteType实例,第一次注册的param1逻辑会被直接忽略。

如何实现两个不同的实例

要同时保留两个不同的实例(或不同的创建逻辑),必须给每个注册项指定唯一的命名标识,示例代码如下:

// 注册第一个带命名的实例工厂
ContainerFactory.Container.RegisterType<ISomeInterface>(
    "InstanceWithParam1",
    new InjectionFactory(container => new SomeConcreteType(param1)));

// 注册第二个带命名的实例工厂
ContainerFactory.Container.RegisterType<ISomeInterface>(
    "InstanceWithParam2",
    new InjectionFactory(container => new SomeConcreteType(param2)));

解析时通过指定名称获取对应实例:

// 获取使用param1创建的实例
ISomeInterface var1 = ContainerFactory.Container.Resolve<ISomeInterface>("InstanceWithParam1");

// 获取使用param2创建的实例
ISomeInterface var2 = ContainerFactory.Container.Resolve<ISomeInterface>("InstanceWithParam2");

补充:InjectionFactory的工作原理

InjectionFactory本质是一个自定义创建实例的委托。当Unity容器需要解析对应类型时,不会默认用反射调用构造函数,而是执行你传入的委托逻辑,由你完全控制实例的创建过程——比如传入特定参数、整合其他依赖、添加初始化步骤等。

内容的提问来源于stack exchange,提问作者Vic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:30:59