Мне дано приложение webapi2 для управления, и я начал писать для него некоторые модульные тесты, так как у него их не было.Правильный способ использования ninject в webapi actionfilter
Тестирование контроллеров и сервисов довольно легко сделать, поскольку они вводят свои зависимости через инъекцию конструктора.
Для действия фильтров я вижу, что все сделано по-другому, поскольку невозможно использовать инжектор конструктора.
Теперь я еще не использовал ninject намного раньше, но это пример того, как были настроены фильтры.
public class CustomFilterAttribute : ActionFilterAttribute
{
public ILog Log { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
var id = int.Parse(actionContext.ActionArguments["id"].ToString());
Log = actionContext.Request
.GetDependencyScope()
.GetService(typeof(ILog))
as ILog;
Log.WriteMessage(string.Format("Got id:{0}",id));
}
}
Моя регистрация выглядит
kernel.Bind<ILog>().ToConstant(new Log());
Похож ли это хорошо? Я не уверен, как написать тест для фильтра, мне как-то нужно высмеивать .GetDependencyScope
, чтобы включить мои обязательные ILog
?
Путь Журнал подключается через фильтр, это правильно?
Престола [Атрибуты Passive] (HTTP: //blog.ploeh .dk/2014/06/13/пассивные-атрибуты /). Я понимаю, что Ninject «решил» эту проблему совершенно по-другому, но всегда лучше создавать приложение, которое работает с конкретным контейнером или без него, чтобы вы могли его поменять в любое время или даже использовать [Pure DI] (http://blog.ploeh.dk/2014/06/10/pure-di/). – NightOwl888