Before reading this article, I highly recommend reading previous part:
Application Launched
OnLaunched function is invoked when the application is launched. In this function, rootFrame.Navigate function is called with default MainPage arguments. Here XMAL Services come to play major role or other way around like, how navigate function is working.
Once this function is called what will happen. The following is an overview of the function called,
- Navigate method internally call the GetXamlType (IXamlMetadataProvider interface) method. It will pass the same Type object.
- GetXamlType check with XmalTypeInfoProvider class.
- XmalTypeInfoProvider load the request object type which is request by Navigate method.
Flow of the function call,
Code view
XmalTypeInfoProvider class
XamlTypeInfoProvider object and store all the information like Page, datatype information.
Above image Application class GetXamlType function requested to the XamlTypeInfoProvider class load the type (page) via GetXamlTypeByType function.
Overview of the flow, GetXamlTypeByType function,
Code
This function first checks the cache dictionary, requested type already exits or not. If it is available return the IxamlType.
If it is not available requested to the LookupTypeIndexByType function get the Index of the type,
Initially _typeTable is empty (Loading application object) and it calls the InitTypeTables() function to fill the _typeTable array and type check with this array return the Index. Now we get the Index & this value pass to the CreateXamlType function to create the object (IXamlType).
CreateXamlType function
Based on the index value read the typeName and type in the dictionary ( remember : blue print) , and this index value based object will create.
typeName: User created page name in the toplevel ( ex : "App6.MainPage").
type: System type of the typeName (ex: typeof (global:App6.MainPage) ;).
Default ( check initial Navigate function we pass the MainPage) page object will create via XamlUserType class, check the arguments typeName and type pass as the “App6.MainPage” ( this page which I have created in the Visual Studio upper level ).
Here clear Page class are handleD in IXamlType .
Overview of the XMALUserType,
Creating Base class (Page) Object
Create object check the XamlUserType constructor last parameter, GetXamlTypeByName("Windows.UI.Xaml.Controls.Page")); Creating XamlUserType first create the BaseType . The GetXamlTypeByName function has taken care for this job.
GetXamlTypeByName function execute like GetXamlTypeByType function until it reaches CreateXamlType function.
Note: typeIndex arguments as 1 : creating the Base object check the typeTable dictionary (remember : blue print) "Windows.UI. Xaml.Controls. Page" index is 1.
Internally Page class base object, XAML services created as XamlSystemBaseType object.
CreateXamlType function create the XamlSystemBaseType object (same IXmalType type)/
Arguments
typeName: "Windows.UI.Xaml.Controls.Page".
type: typeof(global::Windows.UI.Xaml.Controls.Page);
Once base class object has created & return and XamlUserType class object has created. It created only the XamlUserType. The MainPage object is not yet assigned which is passed by the Navigate function, till now what will happen, based on the page which is added in the project, the same equivalent object created in the XMAL services (Not all the object because Navigate fuction only requested to the MainPage).
Assign the MainPage object:
Assign the Datatype
Page object assigned & add the datatype which is handled in the MainPage, in the Member dictionary.
Example: Two string datatype (I have added SetHostName, SetIpName string in MainPage) those datatypes added in the,
RunInitializer
All initialization has done, finally the RunClassConstructor (Run method) is called to create object (page) & activate the page.
Note: If you call this function many times (try separate sample) it calls constructor only one.
Object has successfully created, finally ActivateInstance method is called to create MainPage object and application object load this page in GUI.
Finally, application is launched.