Инъекция зависимостей Ninject в MVC3 - вне контроллера
Мы используем Ninject в нашем проекте MVC3 для внедрения зависимостей. Я использовал NuGet для добавления ссылок на пакеты к пакетам Ninject и Ninject.MVC3. Когда я сделал это, он создал класс NinjectMVC3 в моей папке App_Start:
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IPrincipal>().ToMethod(c => HttpContext.Current.User);
}
}
До сих пор это прекрасно работало для разрешения зависимостей в моих контроллерах:
public class HomeController : Controller {
protected IPrincipal principal { get; set; }
public HomeController(IPrincipal principal) {
this.principal = principal;
}
}
Этот контроллер зависит от IPrincipal, который я настроил в своем классе начальной загрузки для разрешения HttpContext.Current.User. У меня есть другой класс, который имеет зависимость от IPrincipal, который не является контроллером:
public class NonControllerClass
{
protected IPrincipal Principal { get; set; }
public NonControllerClass(IPrincipal principal) {
}
}
Как мне решить эту зависимость? Как бы я это сделал, если бы это не был параметр конструктора? }