Step 1: Create a new Visual Studio project
Step 2: Add the necessary Unity reference
Select Tools > NuGet Package Manager.
Type in the following command:
Install-Package Unity -Version 4.0.1
Unity website for NuGet can be found here:
https://www.nuget.org/packages/Unity/
Step 3: Remove the startup URL
In App.xaml get rid of the StartupUri value:
Step 4: Add the Model class / interface
IModel.cs
namespace DependencyInjection
{
public interface IModel
{
}
}
Model.cs
namespace DependencyInjection
{
public class Model : IModel
{
public Model()
{
Text = "Hello";
}
public string Text { get; set; }
}
}
Step 5: Add the ViewModel class
To deal with the error that we receive in the XAML when a ViewModel has “No parameterless constructor defined for this object” – be sure to create a parameterless constructor that will call the standard constructor.
MainWindowViewModel.cs
namespace DependencyInjection
{
public class MainWindowViewModel
{
private Model _model;
public MainWindowViewModel()
{
}
public MainWindowViewModel(Model model)
{
_model = model;
}
}
}
Step 6: Initialise the View Model on application startup
Here app.xaml.cs is modified as follows:
using System.Windows;
using Microsoft.Practices.Unity;
namespace DependencyInjection
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
IUnityContainer container = new UnityContainer();
container.RegisterType<IModel, Model>();
var mainWindowViewModel = container.Resolve<MainWindowViewModel>();
var window = new MainWindow {DataContext = mainWindowViewModel};
window.Show();
}
}
}
And that is all there is to it.
On debugging notice that on startup the ViewModel is dependency injected with the Model:


