Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Tests
- [TestFixture]
- public class ModulesTests
- {
- [Test]
- public void Kernel_can_load_PostRepositoryModule()
- {
- IKernel kernel = new StandardKernel(new PostRepositoryModule());
- Assert.NotNull(kernel);
- Assert.IsTrue(kernel.HasModule("DependencyInjectionAndModelBinders.Modules.PostRepositoryModule"));
- }
- [Test]
- public void Kernel_can_load_PostRepositoryFactoryModule()
- {
- IKernel kernel = new StandardKernel(new PostRepositoryFactoryModule());
- Assert.NotNull(kernel);
- Assert.IsTrue(kernel.HasModule("DependencyInjectionAndModelBinders.Modules.PostRepositoryFactoryModule"));
- }
- }
- // Relevant parts of Controller
- public class HomeController : Controller
- {
- private IPostRepository repository;
- public HomeController(IPostRepository repository)
- {
- this.repository = repository;
- }
- }
- // Relevant parts of Model binder
- public class CustomModelBinder : DefaultModelBinder
- {
- private IPostRepositoryFactory factory;
- private IPostRepository repository;
- public CustomModelBinder(IPostRepositoryFactory factory)
- {
- this.factory = factory;
- repository = factory.CreatePostRepository();
- }
- }
- // Relevant parts of Global.asax
- public class MvcApplication : NinjectHttpApplication
- {
- // I'm still setting up the kernel this way because of needing
- // the kernel call to add the model binder to Models.Binders.Add()
- private static IKernel kernel;
- public MvcApplication()
- {
- kernel = CreateKernel();
- }
- protected override void OnApplicationStarted()
- {
- AreaRegistration.RegisterAllAreas();
- RegisterGlobalFilters(GlobalFilters.Filters);
- RegisterRoutes(RouteTable.Routes);
- ModelBinders.Binders.Add(typeof(string), kernel.Get<CustomModelBinder>());
- //ModelBinders.Binders.Add(typeof(string), DependencyResolver.Current.GetService<CustomModelBinder>());
- }
- protected override IKernel CreateKernel()
- {
- var kernel = new StandardKernel();
- RegisterServices(kernel);
- return kernel;
- }
- private static void RegisterServices(IKernel kernel)
- {
- //kernel.Load(Assembly.GetExecutingAssembly());
- // Explicitly loading the modules makes no difference.
- kernel.Load<PostRepositoryModule>();
- kernel.Load<PostRepositoryFactoryModule>();
- }
- }
- // PostRepositoryModule
- public class PostRepositoryModule : NinjectModule
- {
- public override void Load()
- {
- this.Bind<IPostRepository>().To<PostRepository>();
- }
- }
- // PostRepositoryFactoryModule
- public class PostRepositoryFactoryModule : NinjectModule
- {
- public override void Load()
- {
- this.Bind<IPostRepositoryFactory>().ToFactory();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement