我有模块化 WPF 应用程序。在我想要的每个模块中都有自己的 Messenger。因为我想在模块内发送一些消息(没有 token )。
第一个模块:
namespace NS1
{
public class MainViewModel : ViewModelBase
{
public MainViewModel(IMessenger messenger) : base(messenger)
{
.......
}
}
public class Module1
{
Messenger Messenger1;
static Module1()
{
Messenger1 = new Messenger();
SimpleIoc.Default.Register<IMessenger>(() => Messenger1);
SimpleIoc.Default.Register<MainViewModel>();
}
}
}
第二个模块:
namespace NS2
{
public class MainViewModel : ViewModelBase
{
public MainViewModel(IMessenger messenger) : base(messenger)
{
.......
}
}
public class Module2
{
Messenger Messenger2;
static Module2()
{
Messenger2 = new Messenger();
SimpleIoc.Default.Register<IMessenger>(() => Messenger2);
SimpleIoc.Default.Register<MainViewModel>();
}
}
}
当然我有错误
SimpleIoc.Default.Register<IMessenger>(() => Messenger2);
我如何注入(inject)
Messenger1
至MainViewModel
在 NS1
和 Messenger2
至MainViewModel
在 NS2
?还是有其他方法? token 很好,但我必须确保在不同的模块中没有相同的 token !
最佳答案
您需要使用 SimpleIoc 中的键注册 Messenger 接口(interface)的每个单独实例。
要获得正确的实例,您还需要使用相同的 key 。
所以恐怕不可能注入(inject)构造函数......你需要使用 GetInstance 方法。
代码示例如下
IMessenger m1 = new Messenger();
IMessenger m2 = new Messenger();
SimpleIoc.Default.Register<IMessenger>(() => m1, "Msg1");
SimpleIoc.Default.Register<IMessenger>(() => m2, "Msg2");
var t = SimpleIoc.Default.GetInstance<IMessenger>("Msg1");
var s = SimpleIoc.Default.GetInstance<IMessenger>("Msg2");
关于c# - MVVM Light 按键注册界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43137369/