code_junkie

Resolving classes without registering them using Castle Windsor

Nov 13th, 2011
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. IUnityContainer unityContainer = new UnityContainer();
  6. IWindsorContainer windsorContainer = new WindsorContainer();
  7.  
  8. Program unityProgram = unityContainer.Resolve<Program>();
  9. Program castleProgram = windsorContainer.Resolve<Program>();
  10. }
  11. }
  12.  
  13. static class WindsorExtensions
  14. {
  15. public static object ResolveType(this IWindsorContainer container, Type type)
  16. {
  17. if ( type.IsClass && !container.Kernel.HasComponent(type) )
  18. container.Kernel.AddComponent(type.FullName, type, LifestyleType.Transient);
  19. return container.Resolve(type);
  20. }
  21.  
  22. public static T ResolveType<T>(this IWindsorContainer container)
  23. { return (T)ResolveType(container, typeof(T)); }
  24. }
  25.  
  26. class Program
  27. {
  28. static void Main(string[] args)
  29. {
  30. IUnityContainer unityContainer = new UnityContainer();
  31. IWindsorContainer windsorContainer = new WindsorContainer();
  32.  
  33. Program unityProgram = unityContainer.Resolve<Program>();
  34. Program castleProgram = windsorContainer.ResolveType<Program>();
  35. }
  36. }
  37.  
  38. public class ViewModelLoader : Castle.MicroKernel.Resolvers.ILazyComponentLoader {
  39. public IRegistration Load(string key, Type service)
  40. {
  41. if (service == null)
  42. return null;
  43. if (service.Name.EndsWith("ViewModel", StringComparison.CurrentCultureIgnoreCase))
  44. return Component.For(service).Named(key);
  45. else
  46. return null;
  47. }
  48. }
Add Comment
Please, Sign In to add comment