Прежде всего, я хотел бы отметить, что я новичок в концепции призмы, DI и контейнеров.Я смотрю на один из примеров кода, предоставляемых библиотекой Prism: код просто внедряет представление со строкой «Hello World» (в элементе TextBlock) в область оболочки.
Когда приложениепри запуске он создает новый экземпляр BootStrapper, который создает и инициализирует оболочку:
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<Shell>();
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.RootVisual = (UIElement)this.Shell;
}
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(HelloWorldModule.HelloWorldModule));
}
}
Мой вопрос касается метода CreateShell ().Я не мог найти нигде в предоставленном коде (включая не в файле конфигурации или любом файле xaml ...), где они регистрируют тип Shell, и даже если он был зарегистрирован - класс Shell поставок не реализует какой-либо интерфейс ... чтосмысл разрешения определенного типа?реализация Shell:
public partial class Shell : UserControl
{
public Shell()
{
InitializeComponent();
}
}
Для меня это выглядит волшебством, поэтому я попытался создать свой собственный тип (MyType) и разрешить его таким же образом:
Container.Resolve<MyType>();
Установивточка разрушения внутри конструктора MyType, я увидел, что он разрешил MyType.Может кто-нибудь, пожалуйста, объясните мне, как это работает?