The*_*mis 1 c# ioc-container mvvm-light
我需要使用创建时传递给ViewModel的特定参数来创建ViewModel的实例。同时,此ViewModel实例应在SimpleIOC中注册
我认为这是解决问题的方法:
SimpleIoc.Register<TClass> Method (Func<TClass>, String, Boolean)
Run Code Online (Sandbox Code Playgroud)
将设置true为最后创建的最后一个参数。因此,如果我正确理解,则此方法希望引用将创建我的ViewModel实例的方法。
看起来这叫做ClassFactory。
我尝试自己做,但我得到的只是
cannot convert from <Class> to System.Func<Class>
Run Code Online (Sandbox Code Playgroud)
因此似乎即时传递的总是类的实例,而不是应该创建该类的方法。
有人可以举一个简短的例子,我如何使它工作
public class ClassFactory
{
public ChatWindow CreateChatWindow(RosterItemX ri)
{
return new ChatWindow(ri);
}
}
public class ViewModelLocator
{
.
.
.
.
public static void CreateWindow(RosterItemX riv)
{
ClassFactory cf = new ClassFactory;
SimpleIoc.Default.Register<ChatWindow>(cf.CreateChatWindow(ri), "key", true )
var _messageWindow = new MessageWindow();
_messageWindow.Show();
}
}
class ChatMessage
{
RosterItemX ri = new RosterItemX();
ViewModelLocator.CreateWindow(ri);
}
Run Code Online (Sandbox Code Playgroud)
正如您自己所说的,您正在ChatWindow为该函数提供a的实例。但是,它实际上期望创建一个的函数ChatWindow。只需将第一个参数转换为lambda() =>
SimpleIoc.Default.Register<ChatWindow>(() => cf.CreateChatWindow(ri), "key", true);
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |