如何获得Stylet中IContainer的引用

使用 Stylet 框架进行 MVVM 开发,采用 IoC 时,我们可能需要传递 IoC 生成的 IContainer 引用,这样可以在其它地方自由地获取实例,比如整个程序的配置文件。

正文

想要获取 IContainer,可以在 Bootstrapper 中获取。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using Stylet;
using StyletIoC;
using log4net.Core;
using log4net;
using Server.Pages;
using Server.Database;
using Server.Config;
using Server.Http;

namespace Server
{
public class Bootstrapper : Bootstrapper<ShellViewModel>
{
private readonly ILog _logger = LogManager.GetLogger(typeof(Bootstrapper));

private HttpServiceMain _httpServer;

protected override void ConfigureIoC(IStyletIoCBuilder builder)
{
// Configure the IoC container in here

// 注册 IoC
var userConfig = new UserConfig();
builder.Bind<UserConfig>().ToInstance(userConfig);
builder.Bind<LiteDBManager>().ToInstance(new LiteDBManager(userConfig));

base.ConfigureIoC(builder);
}

// 在此处获取 Container, 其它地方获取的都是空
protected override void Configure()
{
// Perform any other configuration before the application starts

// 加载静态网页服务
_httpServer = new HttpServiceMain();
_httpServer.Start(Container);

// 加载 websocket
}

protected override void OnStart()
{
Stylet.Logging.LogManager.Enabled = true;

// 添加对所有未捕获异常的读取
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
_logger.Error("未捕获异常:" + e.ExceptionObject.ToString());
}
}
}

参考

[1]. IoC: Static Service Locator