2014-09-17 3 views
0

Я использую свой собственный виртуальный провайдер в своем проекте ASP.Net MVC4. Назовем поставщика MyVirtualPathProvider. Поставщик зарегистрирован в OnApplicationStarted способом, как это:Пользовательский VirtualPathProvider с Ninject

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()); 

метод является частью Global.asax.cs. На вершине которой у меня есть следующие:

public class MvcApplication : NinjectHttpApplication 

Теперь я хотел бы использовать [Inject] атрибут, чтобы ввести один из моих услуг, так же, как это:

[Inject] 
    public ILogger Logger { get; set; } 

В обычае виртуальной поставщик пути я переопределен GetFile метод, где я хотел бы войти что-то с помощью нагнетаемого Logger:

 public override VirtualFile GetFile(string virtualPath) 
    { 
    ... 
     Logger.Log(...); 

к сожалению, регистратор нулевой поэтому он не работает.

Я попытался пройти Logger в качестве параметра в конструкторе пользовательского виртуального провайдера путь, например:

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>())); 

К сожалению, это не путь, потому что у меня есть предупреждение: «предупреждение CS0618: «Ninject.Web.Common.NinjectHttpApplication.Kernel» устарел: «Не использовать Ninject в качестве локатора сервисов»

Что я сделал не так? Пожалуйста, порекомендуйте.

ответ

0

Возможно, вы захотите просмотреть журнал в качестве сквозной задачи и использовать шаблон проектирования Окружающего контекста. Это может помочь в случаях, когда вы не хотите загрязнять конструкторы с помощью обычно используемого типа (так же, как вам могут понадобиться поставщики DateTime). Если бы вы пошли с таким подходом, вы бы поставили перед собой предупреждение, потому что вам не нужно вводить типы в ваш провайдер путей.