This is a short post but I'm happy to let you know that the Microsoft patterns and practices team are currently testing a new release of Prism, the composite user interface framework. There are plans for the new release to support Windows 8 WinRT applications as well as .NET applications.
I'm happy regarding this release because I was worried that this project may have been abandoned like Silverlight.
Read about it here.
Thanks
Injecting multiple ICommand implementations with the Microsoft Unity container
Hello, and welcome to my second article on Dependency Injection and IoC with the Microsoft Unity Framework. In my last post Dependency Injection and Inversion of Control with the Microsoft Unity Container I discussed the importance of coding to an interface and not a concrete implementation. I also introduced the idea of dependencies, and dependency injection using Unity.
As I've been working a lot lately in XAML using the MVVM (Model-View-ViewModel) Pattern, I find myself implementing a lot of ICommand classes. The ICommand interface is very simple, with a method for execution, a method to check if the command can execute, and an event handler to specify the state of the command execution. The interface is very useful because of the way that XAML can bind to these commands to perform actions on button click's and other user interface actions.
Dependency Injection with multiple ICommand implementations
So I had a lot of implementations of the ICommand interface that were used to call on the service layer of my application to complete application tasks. My past experience up until this point never required for me to register one type with multiple interfaces. Luckily, I found it that Unity has a nice way to handle this issue.
So when I setup my container, I register the commands like this
_container.RegisterType<ICommand, LoadQuizesCommand>("LoadQuizes");
_container.RegisterType<ICommand, CreateQuizCommand>("CreateQuiz");
_container.RegisterType<IQuizService, QuizService>();
_container.RegisterType<IMainQuizMenuViewModel, MainQuizMenuViewModel>();
Then here is the ViewModel where the dependencies are injected in the constructor.
using Domain.QuizIt;
using Microsoft.Practices.Unity;
using QuizIt.ViewModels.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using Service.QuizIt.Interfaces;
namespace QuizIt.ViewModels
{
/// <summary>
/// This represents the ViewModel that is bound to the Main Quiz user interface.
/// </summary>
public class MainQuizMenuViewModel : IMainQuizMenuViewModel
{
#region "public properties"
public ICommand LoadQuizesCommand { get; set; }
public ICommand CreateQuizCommand { get; set; }
public IQuizService QuizServiceManager { get; set; }
public List<Quiz> Quizes { get; set; }
public string QuizName { get; set; }
public string QuizDescription { get; set; }
#endregion
#region "constructors"
public MainQuizMenuViewModel([Dependency("LoadQuizes")]ICommand loadQuizesCommand,
[Dependency("CreateQuiz")]ICommand createQuizCommand, [Dependency]IQuizService quizServiceManager)
{
this.LoadQuizesCommand = loadQuizesCommand;
this.CreateQuizCommand = createQuizCommand;
this.QuizServiceManager = quizServiceManager;
}
#endregion
}
}
Notice how I specify the same names in the Dependency attributes in the constructors as I did when registering the types. This way I can specify the command by name and resolve different implementations for multiple ICommand interfaces.
I hope you enjoyed reading this post. Please feel free to comment if you have any tricks of your own with injecting multiple interfaces.