我試圖在WPF MVVM應用程序中實現Unity,但我錯過了大圖。Caliburn.Micro + Unity 2.1 + MVVM:示例代碼
在這個時刻我已經創建了一個引導程序是這樣的:
public class MainBootstrapper : Bootstrapper<MainViewModel>
{
private UnityContainer container;
protected override void Configure()
{
container = new UnityContainer();
container.RegisterType<IServiceLocator, UnityServiceLocator>(new ContainerControlledLifetimeManager());
container.RegisterType<IWindowManager, WindowManager>(new ContainerControlledLifetimeManager());
container.RegisterType<IEventAggregator, EventAggregator>(new ContainerControlledLifetimeManager());
}
protected override object GetInstance(Type service, string key)
{
if (service != null)
{
return container.Resolve(service);
}
if (!string.IsNullOrWhiteSpace(key))
{
return container.Resolve(Type.GetType(key));
}
return null;
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return container.ResolveAll(service);
}
protected override void BuildUp(object instance)
{
container.BuildUp(instance);
}
}
怎麼樣呢就是用最好的方法? 此代碼當前工作:
public class MainViewModel : PropertyChangedBase
{
public MainViewModel()
{ }
[Dependency]
public Sub1ViewModel Sub1VM { get; set; }
[Dependency]
public Sub2ViewModel Sub2VM { get; set; }
}
中的MainView有這樣的:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Name="Sub1VM" />
<ContentControl Grid.Row="1" Name="Sub2VM" />
</Grid>
首先:我共享的代碼,這是使用Unity +卡利的正確方法是什麼?
現在讓我們說我的Sub1VM使用模型'M1',但是Sub2VM需要使用相同的模型來顯示信息,而不是通過創建另一個模型M1的實例。 (singleton)
這是如何工作的?顯示我在每個viewmodel構造函數中使用IServiceLocator?有人可以分享一個代碼示例來解釋它嗎?
感謝您的「從這裏開始」鏈接 – juFo
@juFo,不客氣。 –