Mark Seemannの書籍Dependency Injection in .NETを読んだことがあります。そして私は彼が書いたことのほとんどを理解していると思う。MvvMでI依存性注入を適用するにはどうすればよいですか?
私が苦労している問題は、ビューモデルをビューに挿入したいということです。 私はこれが
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などのリソース命名されています)
に入れます私の質問は今、これは良いDependency Injectionか、これはまだサービスロケータパターン(これはアンチパターンなので使用したくないでしょう)
これが反パターンの場合は、私のオプションは何ですか?
関連:https://stackoverflow.com/questions/32307033/how-to-use-wpf-controls-with-simple-injector-dependencies – Steven