簡體   English   中英

如何在 MVVM Light SimpleIoc 中注冊一系列依賴項

[英]How to register a range of dependencies in MVVM Light SimpleIoc

我想在我的視圖模型定位器類中注冊和取消注冊我的視圖模型。

我想擁有我所有視圖模型的集合並迭代它們以注冊和取消注冊它們。 處理注冊的方法聲明如下:

public bool IsRegistered<T>();
public void Register<TClass>() where TClass : class;
public void Unregister<TClass>() where TClass : class;

我有許多以下的集合來注冊它們:

if (SimpleIoc.Default.IsRegistered<SettingsViewModel>() == false)
{
    SimpleIoc.Default.Register<SettingsViewModel>();
}

並取消注冊它們:

SimpleIoc.Default.Unregister<SettingsViewModel>();

我想 foreach 這段代碼,所以我只有一個地方來聲明我的 ViewModel。 我無法獲得正確的語法來執行此操作。

//Incorrect non compiling code
foreach (Type viewModel in ViewModels)
{
    T t = viewModel.BaseType;
    if (SimpleIoc.Default.IsRegistered<viewModel>() == false)
    {
        SimpleIoc.Default.Register<viewModel>();
    }
}

看着 SimpleIoc 我得出結論,沒有辦法做你想做的事,因為沒有以 Type 作為參數的 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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM