C# 如何在MVVM Light SimpleIoc中注册一系列依赖项

C# 如何在MVVM Light SimpleIoc中注册一系列依赖项,c#,generics,mvvm-light,ioc-container,C#,Generics,Mvvm Light,Ioc Container,我想在视图模型定位器类中注册和注销视图模型 我希望有一个所有视图模型的集合,并对它们进行迭代以注册和注销它们。处理注册的方法声明如下: public bool IsRegistered<T>(); public void Register<TClass>() where TClass : class; public void Unregister<TClass>() where TClass : class; public bool已注册(); public

我想在视图模型定位器类中注册和注销视图模型

我希望有一个所有视图模型的集合,并对它们进行迭代以注册和注销它们。处理注册的方法声明如下:

public bool IsRegistered<T>();
public void Register<TClass>() where TClass : class;
public void Unregister<TClass>() where TClass : class;
public bool已注册();
public void Register(),其中TClass:class;
public void Unregister(),其中TClass:class;
我有以下多套可供注册:

if (SimpleIoc.Default.IsRegistered<SettingsViewModel>() == false)
{
    SimpleIoc.Default.Register<SettingsViewModel>();
}
SimpleIoc.Default.Unregister<SettingsViewModel>();
if(simpleoc.Default.IsRegistered()==false)
{
SimpleIoc.Default.Register();
}
以及注销它们:

if (SimpleIoc.Default.IsRegistered<SettingsViewModel>() == false)
{
    SimpleIoc.Default.Register<SettingsViewModel>();
}
SimpleIoc.Default.Unregister<SettingsViewModel>();
SimpleIoc.Default.Unregister();
我想查看这段代码,所以我只有一个地方可以声明我的ViewModels。我无法获得正确的语法来执行此操作

//Incorrect non compiling code
foreach (Type viewModel in ViewModels)
{
    T t = viewModel.BaseType;
    if (SimpleIoc.Default.IsRegistered<viewModel>() == false)
    {
        SimpleIoc.Default.Register<viewModel>();
    }
}
//不正确的非编译代码
foreach(在ViewModels中键入viewModel)
{
T T=viewModel.BaseType;
if(SimpleIoc.Default.IsRegistered()==false)
{
SimpleIoc.Default.Register();
}
}

通过查看SimpleIoc,我得出的结论是,没有办法实现您想要的功能,因为没有以类型作为参数的Register方法

如果您考虑另一个IOC容器,下面是它将如何与AutoFac一起工作。请注意,此示例做出了一些假设(对名称空间进行过滤,每个依赖项都有一个接口),在使用之前根据您的情况删除或更改这些假设

    var repositoryAssembly = typeof(SettingsViewModel).Assembly;
    var registrations =
        from type in repositoryAssembly.GetExportedTypes()
        where type.Namespace == "MyApp.ViewModels"
        where type.GetInterfaces().Any()
        select new { Service = type.GetInterfaces().Single(), Implementation = type };

    foreach (var reg in registrations)
    {
        container.RegisterType(reg.Implementation).As(reg.Service).InstancePerRequest();
    }

你能提供一个简单的例子来解释你的意思吗。我误解了这个问题:(首先,看起来不像是使用泛型的情况。是否可以选择将模型类的类型作为普通参数传递给这三个函数?