DryIoc注册带参数的接口/类构造函数问题求助
解决DryIoc中已有实例的依赖注册问题
嘿,我懂你这种卡在简单问题上的烦躁——明明翻了官网和Stack Overflow的例子,但就是没对上自己的场景对吧?结合你给出的代码片段,我猜你是想把已经手动创建好的mySample1和mySample2作为依赖注入到其他服务里,但不知道怎么在DryIoc里正确注册?别着急,我给你两种最常用的解决方案:
方案一:将已有实例注册到容器全局
如果你希望整个容器都能使用这些预创建的实例,直接用Instance方法(DryIoc v3+版本)或者RegisterInstance(旧版本)注册它们,之后容器会自动把这些实例注入到依赖它们的服务中:
class Program { static void Main(string[] args) { var mySample1 = new SampleOne {TestProperty = "Test1"}; var mySample2 = new SampleTwo {TestProperty2 = "Test2"}; using (var container = new Container()) { // 注册预创建的实例到容器 container.Instance(mySample1); container.Instance(mySample2); // 注册依赖这两个实例的服务(假设你的ICustomService实现需要它们作为构造参数) container.Register<ICustomService, CustomServiceImpl>(); // 解析服务,DryIoc会自动注入mySample1和mySample2 var service = container.Resolve<ICustomService>(); service.PrintValues(); // 验证注入结果 } } } // 补充你可能的类定义 public interface ICustomService { void PrintValues(); } public class CustomServiceImpl : ICustomService { private readonly SampleOne _sample1; private readonly SampleTwo _sample2; // 通过构造函数声明依赖 public CustomServiceImpl(SampleOne sample1, SampleTwo sample2) { _sample1 = sample1; _sample2 = sample2; } public void PrintValues() { Console.WriteLine($"Sample1的值:{_sample1.TestProperty}"); Console.WriteLine($"Sample2的值:{_sample2.TestProperty2}"); } } public class SampleOne { public string TestProperty { get; set; } } public class SampleTwo { public string TestProperty2 { get; set; } }
方案二:仅给特定服务传入实例(不全局注册)
如果你不想把SampleOne和SampleTwo注册到容器全局,只是想让某个特定服务使用这些预创建的实例,可以用Made.Of指定构造参数:
using (var container = new Container()) { // 直接注册服务时指定构造参数为预创建的实例 container.Register<ICustomService>( made: Made.Of(() => new CustomServiceImpl(mySample1, mySample2)) ); var service = container.Resolve<ICustomService>(); service.PrintValues(); }
关键注意点
- 确保你的服务类(比如
CustomServiceImpl)的构造函数明确声明了依赖的类型,DryIoc才能自动匹配注入。 - 如果你的实例是单例需求,
Instance方法默认就是单例生命周期,不需要额外配置;如果需要其他生命周期,可以加参数(比如Reuse.Scoped)。
内容的提问来源于stack exchange,提问作者developer9969




