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

控制台应用中静态方法调用非静态方法的Unity依赖注入问题

解决Unity依赖注入下控制台应用Main方法调用非静态服务方法的问题

这是个很典型的控制台应用结合依赖注入的入门问题,我来帮你搞定:

你的核心矛盾在于Main方法必须是静态的,但你的Program类通过构造函数注入了IFooService,导致无法直接在静态方法里调用依赖注入的非静态成员方法。解决方案很简单:让Unity容器来帮你实例化Program类,而不是手动创建,这样既能遵循依赖注入的设计理念,又能正确获取到注入的服务实例。

修改你的Program类代码如下:

class Program {
    private readonly IFooService _service;
    public Program(IFooService service) {
        _service = service;
    }
    static void Main(string[] args) {
        var unity = new UnityContainer();
        var unityConfig = new MyUnityConfig();
        unityConfig.RegisterTypes(unity);
        
        // 关键:让Unity解析Program实例,自动注入所需的IFooService
        var programInstance = unity.Resolve<Program>();
        programInstance.MyFunc();
    }
    public void MyFunc() {
        Console.WriteLine("Hello world!");
        _service.ServiceFunc();
    }
}

原理说明:

  1. 你已经在MyUnityConfig里注册了IFooService和它的实现类FooService,同时也注册了IFooRepository,Unity容器会自动管理这些依赖的实例化。
  2. 当你调用unity.Resolve<Program>()时,Unity会检查Program的构造函数,发现它需要一个IFooService实例,接着容器会根据之前的注册,创建FooService的实例(同时自动注入它依赖的FooRepository),最后把这个IFooService实例注入到Program的构造函数中,生成完整的Program实例。
  3. 这样你就可以通过这个实例调用MyFunc方法,而_service也已经被正确注入,完全符合依赖注入的设计原则,不需要手动实例化任何依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:47:01