Tết
Nam nhi tự hữu xung thiên chí
Hưu hướng Như Lai hành xứ hành
Thiền sư Quảng Nghiêm [1122-1190]
ASP.NET MVC 3: Inversion of control
This is the first post in the series that I am going to warm up my knowledge in ASP.NET MVC. I will pick the latest version, ASP.NET MVC 3 RTM. It is good for me to recall the old things and know the new things as well.
In the new features, I first try IoC improvements. Controller factory was extensibility point that I liked. This is where I could register external services that controllers need. It’s not only to resolve dependencies for controllers, more than that, thinking of chain of dependency. In ASP.NET MVC 3, controller factory is disappeared and the interface IDependencyResolver is introduced.
public class ServiceResolver : IDependencyResolver { private IUnityContainer container; public ServiceResolver() { this.container = new UnityContainer(); this.RegisterServices(); } private void RegisterServices() { this.container.RegisterType<IFooService, FooService>(); } public object GetService(Type serviceType) { try { return this.container.Resolve(serviceType); } catch { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return this.container.ResolveAll(serviceType); } catch { return new List<object>(); } } }
Once I have an instance that is implementation of this interface, I could set it as default resolver to inject dependencies into controllers.
protected void Application_Start() { //... DependencyResolver.SetResolver(new ServiceResolver()); }
There is also an overload of static method DependencyResolver.SetResolver with parameter is Common Service Locator. It sounds cool, but I am not sure will use it.
It is trick to must have try/catch block in GetService method. Without this, ASP.NET MVC 3 will throw an error related to IControllerFactory. Oops, it is not disappeared totally.
My presentation at BarCamp Saigon 2010
It’s my first attendance at BarCamp Saigon. It’s very impressed to meet and talk with some cool guys. I do hope there will be some events like this, especially for .NET developers community where everybody can come, learn and share. If you are interesting, please drop me a line.
Below are slides of my presentation on Ruby on Rails 3.