Я разрабатываю приложение, используя WPF с шаблоном MVVM и Prism.Представления добавляются в ModuleCatalog, а модели представлений регистрируются в едином контейнере.Для этого я использую Bootstrapper, который отвечает за создание оболочки, настройку контейнера Unity и каталога модулей.
Теперь вопрос в том, как внедрить мой EntityContext в несколько моделей представления.
Сначала Bootstrapper:
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
Shell shell = Container.Resolve();
shell.Show();
return shell;
}</p>
<pre><code> protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterType<EntityContext >("Context");
Container.RegisterType<PersonViewModel>(new InjectionConstructor(
new ResolvedParameter<EntityContext >("Context")));
}
protected override IModuleCatalog GetModuleCatalog()
{
ModuleCatalog catalog = new ModuleCatalog();
catalog.AddModule(typeof(PersonModule));
return catalog;
}
Видовая модель выглядит так (отрывок)
public class PersonViewModel : ViewModelBase, IDataErrorInfo
{
private Person _person;
private PersonRepository _repository;
readonly EntityContext _context;</p>
<pre><code> public PersonViewModel(EntityContext context)
{
_context = context;
_person = new Person();
_repository = new PersonRepository(context);
}
Модуль:
public class PersonModule : IModule
{
private readonly IRegionManager regionManager;</p>
<pre><code> public PersonModule(IRegionManager regionManager)
{
this.regionManager = regionManager;
}
public void Initialize()
{
regionManager.RegisterViewWithRegion("PersonData", typeof(PersonView));
}
}
Кодовое представление представления:
public partial class PersonView : UserControl
{
private PersonViewModel _vm;</p>
<pre><code> public PersonView()
{
InitializeComponent();
}
[Dependency]
public PersonViewModel VM
{
get
{
return this.DataContext as PersonViewModel;
}
set
{
_vm = value;
this.DataContext = _vm;
}
}
}
Я не уверен, работает ли мой подход в принципе, норади сохранения изменений в базе данных мне нужен мой контекст в знании изменений, внесенных в нее.Сейчас он явно не работает, потому что возникает ModuleInitializeException .Stacktrace:
Возникла исключительная ситуация при инициализации модуля «PersonModule».
- Сообщение об исключительной ситуации: произошла исключительная ситуация при попытке добавить представление в область «PersonData».
- Наиболее вероятная причина былаwas: 'System.InvalidOperationException: тип EntityContext имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность.
bei Microsoft.Practices.ObjectBuilder2.ConstructorSelectorPolicyBase 1.FindLongestConstructor(Type typeToConstruct)<br>
bei Microsoft.Practices.ObjectBuilder2.ConstructorSelectorPolicyBase
1.SelectConstructor (контекст IBuilderContext)
bei Microsoft.Pract.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp (контекст IBuilderContext)
bei Microsoft.Practices.ObjectBuilder2.StrategyChain.- Сборка, из которой модуль пытался загрузить модуль, была следующей: App, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null
Проверьте свойство InnerException исключения для получения дополнительной информации.Если во время создания объекта в DI-контейнере возникла исключительная ситуация, вы можете включить исключение. GetRootException () поможет найти основную причину проблемы.
Если есть другие решения для этой проблемы, я открыт для нее, но я хочу использовать представленную базовую структуру более или менее.
Заранее спасибо.