我看过Mark Seemann的书《.NET中的依赖注入》。我认为我理解了他所写的大部分内容。
我现在遇到的问题是,我想将viewmodels注入到views中。 我知道可以通过
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命名为一项资源。
我的问题是,这样做是否是良好的依赖注入?或者这仍然是服务定位器模式(这是一种反模式,因此我不想使用它)
如果这是反模式,我有哪些选项?