【发布时间】:2016-12-29 10:43:47
【问题描述】:
我读过 Mark Seemann 的 .NET 中的依赖注入一书。而且我想我理解他写的大部分内容。
我正在努力解决的问题是我想将视图模型注入到视图中。 我知道这可以通过
public class CompositeRoot
{
private IContainer container;
public CompositeRoot()
{
//build the container
var builder = new ContainerBuilder();
builder.RegisterType<DatabaseContext>().As<IDatabaseContext>();
builder.RegisterType<MainViewModel>().As<IMainViewModel>();
container = builder.Build();
//create a window and inject a viewmodel
MainWindow mainWindow = container.Resolve<MainWindow>();
mainWindow.DataContext = container.Resolve<IMainViewModel>();
mainWindow.Show();
}
}
但这似乎相当粗糙。
我在想:
public class CompositeRoot
{
private IContainer container;
public CompositeRoot()
{
//build the container
var builder = new ContainerBuilder();
builder.RegisterType<DatabaseContext>().As<IDatabaseContext>();
builder.RegisterType<MainViewModel>().As<IMainViewModel>();
container = builder.Build();
}
public IMainViewModel MainVM
{
get { return container.resolve<IMainViewModel>(); }
}
}
然后放入xaml代码
DataContext="{Binding MainVM, Source={StaticResource IoC}}"
(在 app.xaml 中,我会将 Compositeroot 命名为 IoC 资源)
我现在的问题是,这会是好的依赖注入,还是仍然是服务定位器模式(这是一种反模式,所以我不想使用它)
如果这是反模式,我有什么选择?
【问题讨论】:
标签: c# wpf mvvm dependency-injection