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

本文关键字:参数 实例 包含 注册 SimpleIOC | 更新日期: 2023-09-27 18:35:50

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

我认为这是它的方法:

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

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

这似乎被称为类工厂。

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

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

}

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

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

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