Advertisement
Guest User

NInject 3 and custom model binder

a guest
Feb 8th, 2012
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.81 KB | None | 0 0
  1. // Tests
  2. [TestFixture]
  3. public class ModulesTests
  4. {
  5.     [Test]
  6.     public void Kernel_can_load_PostRepositoryModule()
  7.     {
  8.         IKernel kernel = new StandardKernel(new PostRepositoryModule());
  9.  
  10.         Assert.NotNull(kernel);
  11.         Assert.IsTrue(kernel.HasModule("DependencyInjectionAndModelBinders.Modules.PostRepositoryModule"));
  12.     }
  13.  
  14.     [Test]
  15.     public void Kernel_can_load_PostRepositoryFactoryModule()
  16.     {
  17.         IKernel kernel = new StandardKernel(new PostRepositoryFactoryModule());
  18.  
  19.         Assert.NotNull(kernel);
  20.         Assert.IsTrue(kernel.HasModule("DependencyInjectionAndModelBinders.Modules.PostRepositoryFactoryModule"));
  21.     }
  22. }
  23.  
  24. // Relevant parts of Controller
  25. public class HomeController : Controller
  26. {
  27.     private IPostRepository repository;
  28.  
  29.     public HomeController(IPostRepository repository)
  30.     {
  31.         this.repository = repository;
  32.     }
  33. }
  34.  
  35. // Relevant parts of Model binder
  36. public class CustomModelBinder : DefaultModelBinder
  37. {
  38.     private IPostRepositoryFactory factory;
  39.     private IPostRepository repository;
  40.  
  41.     public CustomModelBinder(IPostRepositoryFactory factory)
  42.     {
  43.         this.factory = factory;
  44.         repository = factory.CreatePostRepository();
  45.     }
  46. }
  47.  
  48. // Relevant parts of Global.asax
  49. public class MvcApplication : NinjectHttpApplication
  50. {
  51.     // I'm still setting up the kernel this way because of needing
  52.     // the kernel call to add the model binder to Models.Binders.Add()
  53.     private static IKernel kernel;
  54.  
  55.     public MvcApplication()
  56.     {
  57.         kernel = CreateKernel();
  58.     }
  59.  
  60.     protected override void OnApplicationStarted()
  61.     {
  62.         AreaRegistration.RegisterAllAreas();
  63.  
  64.         RegisterGlobalFilters(GlobalFilters.Filters);
  65.         RegisterRoutes(RouteTable.Routes);
  66.  
  67.         ModelBinders.Binders.Add(typeof(string), kernel.Get<CustomModelBinder>());
  68.         //ModelBinders.Binders.Add(typeof(string), DependencyResolver.Current.GetService<CustomModelBinder>());
  69.     }
  70.  
  71.     protected override IKernel CreateKernel()
  72.     {
  73.         var kernel = new StandardKernel();
  74.         RegisterServices(kernel);
  75.         return kernel;
  76.     }
  77.  
  78.     private static void RegisterServices(IKernel kernel)
  79.     {
  80.         //kernel.Load(Assembly.GetExecutingAssembly());
  81.         // Explicitly loading the modules makes no difference.
  82.         kernel.Load<PostRepositoryModule>();
  83.         kernel.Load<PostRepositoryFactoryModule>();
  84.     }
  85. }
  86.  
  87. // PostRepositoryModule
  88. public class PostRepositoryModule : NinjectModule
  89. {
  90.     public override void Load()
  91.     {
  92.         this.Bind<IPostRepository>().To<PostRepository>();
  93.     }
  94. }
  95.  
  96. // PostRepositoryFactoryModule
  97. public class PostRepositoryFactoryModule : NinjectModule
  98. {
  99.     public override void Load()
  100.     {
  101.         this.Bind<IPostRepositoryFactory>().ToFactory();
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement