Я пытаюсь написать тест MSpec, который создает один из моих контроллеров со всеми правильными привязками Ninject. Как мне это сделать? Это то, что я до сих пор:
[Subject(Concern.Initialization)]
public class when_permanent_employee_page_is_loaded_for_first_time
{
private static PermanentEmployeeController controller;
Establish context = () =>
{
NinjectControllerFactory controllerFactory = new NinjectControllerFactory();
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
controller = (PermanentEmployeeController)controllerFactory.CreateController(new RequestContext(), "PermanentEmployee");
};
private Because of = () => controller.Index();
private It should_load_all_available_jobs = () =>
{
var blah = controller;
var blah3 = 3;
};
It should_load_all_available_locations;
It should_load_all_available_departments;
}
В приведенном выше коде я просто пытаюсь понять, смогу ли я создать экземпляр своего контроллера со всеми тактовыми привязками Ninject. Класс NinjectControllerFactory выглядит следующим образом:
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel kernel = new StandardKernel(new DefaultModule());
public IKernel Kernel
{
get
{
return kernel;
}
set
{
this.kernel = value;
}
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return null;
}
return (IController)kernel.Get(controllerType);
}
}
И класс DefaultModule, как это:
public class DefaultModule : NinjectModule
{
/// <summary>
/// Performs the binding of interfaces to their respective implementations. 'Tis very cool.
/// </summary>
public override void Load()
{
// Data service bindings
Bind<IJobService>().To<JobServiceImpl>().InTransientScope();
Bind<IJobWsWrapper>().To<JobWsWrapperImpl>().InTransientScope();
// View model factory bindings
Bind<IPermanentEmployeeViewModelFactory>().To<PermanentEmployeeViewModelFactoryImpl>().InTransientScope();
}
}
Итак, мой вопрос: есть ли способ указать привязки моего модуля Ninject в моем тесте MSpec, а затем использовать этот экземпляр для моего экземпляра контроллера? Я хочу избежать создания экземпляра моего контроллера следующим образом: var controller = new Controller (), поскольку это не позволяет мне проверять привязки Ninject. Я также изучил класс TestControllerBuilder из библиотеки MvcContrib, но я не понял, как создавать экземпляры контроллеров с привязками Ninject. Спасибо за помощь!