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

WPF MVVM项目中使用Autofac与IHostBuilder如何在OnStartup中解析服务?

解决方法

你不需要单独保存ContainerBuilder或者容器引用,.NET通用主机(Generic Host)已经帮你封装好了Autofac的服务提供器,直接用host.Services即可解析服务。


具体修改步骤

  1. 先确认你已经在App类中声明了IHost类型的全局成员变量:
public partial class App : Application
{
    private IHost host;
    // 其他代码
}
  1. 删掉构造函数中_containerBuilder = builder;这行代码,Host构建完成后ContainerBuilder就没有作用了,不需要保留引用。
  2. 修改OnStartup方法,有两种解析服务的写法:

写法1:使用.NET内置的DI扩展(不需要额外引用Autofac命名空间)

protected override async void OnStartup(StartupEventArgs e)
{ 
    await host.StartAsync();

    // 直接通过主机的服务提供器解析服务
    var mainVM = host.Services.GetRequiredService<IMainViewModel>();
    
    var window = new MainWindow { DataContext = mainVM };
    window.Show();

    base.OnStartup(e);
}

写法2:使用Autofac原生的Resolve API

如果需要用到Autofac特有的解析能力,可以将host.Services转换为Autofac的ILifetimeScope类型:

using Autofac;

protected override async void OnStartup(StartupEventArgs e)
{ 
    await host.StartAsync();

    var lifetimeScope = host.Services as ILifetimeScope;
    var mainVM = lifetimeScope.Resolve<IMainViewModel>();
    
    var window = new MainWindow { DataContext = mainVM };
    window.Show();

    base.OnStartup(e);
}

额外注意

记得重写应用退出方法,释放主机资源,避免内存泄漏:

protected override async void OnExit(ExitEventArgs e)
{
    await host.DisposeAsync();
    base.OnExit(e);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:03