如何在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
相关产品推荐
相关产品推荐

