# KnowledgeBase for Prism Guidance

* [Official Site](https://prismlibrary.com/)
* Existing Mitech-wpf use `Prism 4.x`. The only official legacy reference is based on [Prism 6](https://prismlibrary.com/docs/wpf/legacy/Introduction.html)
  * Its using `MEF Ioc (Dependency Injection)`. The `MEF DI` was removed from Prism 7.x and above. Only `Unity Dependency Injection` supported form Prism 7.x onward
  * **MEF** vs **Unity** Modularity [Quick Start](https://learn.microsoft.com/en-us/previous-versions/msp-n-p/ff921068(v=pandp.40)?redirectedfrom=MSDN)
* The latest Prism Library is `8.1`
* Prism 8 support NET 5 and dotnet Framework. Prism 6.x and below only DotNet Framework 4.8 and below.

## Legacy Documentation
- [Prism 5](https://www.microsoft.com/en-sg/download/details.aspx?id=42572)
- Another nice [link](https://www.cnblogs.com/DoubleChen/p/3687305.html)

## Migration Guides
- [Prism 4.1 to 5](https://learn.microsoft.com/en-us/previous-versions/msp-n-p/ff921144(v=pandp.40))
  - `Microsoft.Practices.Prism.ViewModel` namespace deprecated. Please use `Microsoft.Practices.Prism.Mvvm`
  - The `BindableBase` class was added to simplify `INotifyPropertyChanged` interface.
  - EventAggregator Namespace and API Changes. **NEW** `Prism.PubSubEvents` namespace
  - Regions Namespace API Changes
    - `UriQuery` class was replaced with the `NavigationParameters`
  - Namespace changes
  - Refer to [Prism 5 pdf](./legacy/Prism5forWPF.pdf) for legacy changes
  ```cs
  using Microsoft.Practices.Prism.ViewModel;

  // change to
  using Microsoft.Practices.Prism.Mvvm;
  using Microsoft.Practices.Prism.Mvvm.Desktop;
  using Microsoft.Practices.Prism.ShareInterfaces;
  ```

- [Prism 5 to 6](https://github.com/PrismLibrary/Prism/wiki/Release-Notes---6.0.0)
  - Breaking Changes
    - Removed `Microsoft.Practices` from all namespaces
  - Created new xmlns namespace `http://prismlibrary.com/`

- [Prism 6 to 8](https://prismlibrary.com/docs/wpf/converting-from-6.html)
  - Bootstrapper class need to move to Application class
  - use `xmlns:prism="http://prismlibrary.com/"`

- [Prism 7.1](https://brianlagunas.com/whats-new-prism-7-1/)
  - **BIG** changes. [Release Notes](https://github.com/PrismLibrary/Prism/releases/tag/v7.1.0)
  - No longer be shipping or supporting MEF for WPF
  - New `Prism.IoC` namespace
  - For `Prism.WPF`, introduced new `PrismApplication` base class. `Bootstrapper` class deprecated.

- [Prism 7 to 8](https://prismlibrary.com/docs/wpf/converting-from-7.html)
  - [Release Notes](https://github.com/PrismLibrary/Prism/releases/tag/v8.0.0.1909)
  - AutoWireViewModel is now default to true `prism:ViewModelLocator.AutoWireViewModel="True"`
  - Removed `ILoggerFacade`. Use `Prism.Plugin.Logging`

## Online Tutorial
- [Prism 6 Unity - VS2015](https://www.c-sharpcorner.com/article/getting-started-mvvm-pattern-using-prism-library-in-wpf/)

## Tutorials
- [View-ViewModel](./view-viewmodel.md)