![](/img/trans.png)
[英]How to register a class that implements multiple interfaces in MVVM Light's 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.