我有一個 MVVM wpf 應用程式,我試圖在其中使用 Autofac 實作依賴項注入。
應用程式.xaml.cs :
public App(){
// getting config path here
...
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(configFilePath, optional: true, reloadOnChange: true)
.Build();
// Host builder
host = Host.CreateDefaultBuilder()
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder =>
{
builder.RegisterModule(new ConfigurationModule(config));
builder.RegisterType<MyService>().As<IMyService>();
builder.RegisterType<MainViewModel>().As<IMainViewModel>();
builder.Register(c => c.Resolve<IHttpClientFactory>().CreateClient()).As<HttpClient>();
_containerBuilder = builder;
})
.Build();
}
然后在應用程式啟動時我想設定我的視圖模型資料背景關系
protected override async void OnStartup(StartupEventArgs e)
{
await host.StartAsync();
// How to get a reference to my container or scope here to be able to resolve IMainViewModel ?
var container = ...
var mainVM = container.Resolve<IMainViewModel>();
var window = new MainWindow { DataContext = mainVM };
window.Show();
base.OnStartup(e);
}
如何在 OnStartup 方法中決議我的 MainViewModel ?
uj5u.com熱心網友回復:
IHost可用于決議主視圖模型的服務提供者
using Microsoft.Extensions.DependencyInjection;
//...
protected override async void OnStartup(StartupEventArgs e) {
await host.StartAsync();
IServiceProvider services = host.Services;
IMainViewModel mainVM = services.GetService<IMainViewModel>();
var window = new MainWindow { DataContext = mainVM };
window.Show();
base.OnStartup(e);
}
它將呼叫引擎蓋下的 Autofac 容器。服務提供者只是 Autofac 容器之上的一個抽象,因為
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
被呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370999.html
上一篇:并非所有代碼路徑都在異步陳述句lambda中回傳值錯誤
下一篇:c#比較字串陣列和型別陣列
