c# - 如何在 SimpleIOC 中注册包含参数的类实例

标签 c# mvvm-light ioc-container

我需要创建一个 ViewModel 的实例,并在创建时将特定参数传递给 ViewModel。同时这个ViewModel实例应该在SimpleIOC中注册

我认为这是它的方法:

SimpleIoc.Register<TClass> Method (Func<TClass>, String, Boolean)

为即时创建的最后一个参数设置为 true。 所以如果我理解正确的话,这个方法需要一个对将创建我的 ViewModel 实例的方法的引用。

这看起来叫做 ClassFactory。

我试着自己做,但我得到的只是

cannot convert from <Class> to System.Func<Class>

所以看起来我总是传递类的实例,而不是应该创建它的方法。

谁能举个简短的例子让我如何让它工作

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);


}

最佳答案

正如您自己所说,您正在提供一个 ChatWindow 的实例到功能。但是,它实际上需要一个创建 ChatWindow 的函数。 .只需使用 () => 将第一个参数转换为 lambda。

SimpleIoc.Default.Register<ChatWindow>(() => cf.CreateChatWindow(ri), "key", true);

关于c# - 如何在 SimpleIOC 中注册包含参数的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586715/

相关文章:

C# String.Format() 在 PHP 中等效?

mvvm-light - 在 Windows Phone MVVM 应用程序中播放/暂停 mp3 文件

wpf - .net 4 框架中的 WPF4 中的 EventToCommand 未附带 LightMvvm

windows-phone-7 - 如何在 WP7 中将 ToggleSwitch 与 MVVM Light 一起使用?

dependency-injection - 什么时候使用属性注入(inject)?

.net - 我应该使用哪种依赖注入(inject)工具?

c# - 生成大文档后 IIS 内存使用不会恢复正常

c# - 如何以编程方式构建屏幕伴侣?

c# - 每个 WCF 服务的新 ServiceHost?

asp.net-mvc - 项目 Windsor - 存储库扩展 DataContext