Я регистрация несколько модулей в моем приложении Prism с помощью UnityBootstrapperКак разрешить типы, зарегистрированные в других модулях в Призме?
protected override IModuleCatalog GetModuleCatalog()
{
var catalog = new ModuleCatalog();
catalog
.AddModule(typeof(LoginModule))
.AddModule(typeof(AppModule))
.AddModule(typeof(DataTransformationModule), InitializationMode.OnDemand)
.AddModule(typeof(SyncModule), InitializationMode.OnDemand);
return catalog;
}
Позже я загружаю эти модули, которые устанавливаются для загрузки OnDemand динамически в ответ на действия пользователя. Хотя мне удалось загрузить модули OnDemand из других модулей, типы, зарегистрированные в модулях загрузки OnDemand, не получили разрешения.
public class SyncModule : IModule
{
private readonly IUnityContainer container;
public SyncModule(IUnityContainer container)
{
this.container = container;
}
public void Initialize()
{
this.RegisterViewsAndServices();
ISyncController controller = this.container.Resolve<ISyncController>();
controller.Run();
}
protected void RegisterViewsAndServices()
{
this.container.RegisterType<ISyncController, SyncController>();
this.container.RegisterType<ISyncAnchorsRepository, SyncAnchorsRepository>();
this.container.RegisterType<ISyncService, SyncService>();
this.container.RegisterType<IView, SynchronizeView>("SynchronizeView");
this.container.RegisterType<IView, SyncTrayView>("SyncTrayView");
}
}
При попытке загрузить любой из типов, зарегистрированных в SyncModule (как показано выше), из другого модуля компилятор генерирует ResolutionFailedException, поскольку каждый модуль. Нужно ли в любом случае вводить один экземпляр IUnityContainer во все модули? (Это будет злоупотребление призмой?)
Вы должны 1) всегда показывать нам свой реальный код 2) не использовать Type.GetType для любого из этого. Если у вас есть типы, которые необходимо использовать для разных модулей, эти модули имеют общую библиотеку. Обычно я называю это сборкой «Контракты». Если вы используете что-то вроде ISyncService, просто выполните singleContainer.Resolve(), а не (что я думаю, что вы делаете) unitContainer.Resolve (Type.GetType («SyncModule.ISyncService, SyncModule»)); –
Привет Андерсон, не могли бы вы взглянуть на этот вопрос: http://stackoverflow.com/questions/1678423/what-is-the-best-method-to-load-views-dynamically-from-a-navigation- control-in-pr Я разработал сценарий, в котором я использую GetType() с образцом кода. – Raj