2012-04-17 3 views
0

У меня есть проект MVC3, который я использую Ninject для внедрения контекста Entity Framework. Я использую пакет Ninject (3.0.0.15), Ninject.MVC3 (3.0.0.6) и Ninject.Web.Common (3.0.0.7). Все работает отлично, за исключением случаев, когда я пытаюсь ввести код WebForms за файлом. Я предполагаю, что это потому, что у меня нет чего-то правильно подключенного, но я не уверен, как его подключить. Ninject также не работает в файлах, созданных Razor.Как вы можете вводить объекты в объекты, не связанные с контроллером, используя Ninject 3.0 с ASP.NET MVC3

Вот мой код для моего кода За:

[Inject] 
public IDbContext DataContext { get; set; } 

Свойство Контекст выходит нулевой каждый раз. Он работал отлично, пока я не обновился до Ninject 3.0.

Мой метод запуска выглядит следующим образом:

public static void Start() 
{ 
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
    Bootstrapper.Initialize(CreateKernel); 
} 

Любые идеи о том, как сделать Ninject впрыскивать DataContext в WebForm и в классы, экземпляры которых по бритве?

+0

Почему у вас есть код за файлами в приложении ASP.NET MVC? –

+0

Мы еще не перенесли весь сайт на MVC. Это было полностью в WebForms, у нас осталось несколько страниц WebForms. –

+0

Но если у вас есть устаревший код, почему вы его модифицируете? Почему вы пытаетесь вложить в него зависимости? Почему бы не повторно использовать его как есть и постепенно мигрировать? –

ответ

1

Для этой работы вам необходимо установить Ninject.Web NuGet (последняя версия на момент написания этой статьи 3.0.0.5), а затем иметь свой веб-формы происходят из Ninject.Web.PageBase вместо System.Web.UI.Page:

public partial class WebForm1 : Ninject.Web.PageBase 
{ 
    [Inject] 
    public IDbContext Ctx { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

Также обратите внимание, что я использовал имя Ctx как имя свойства, потому что уже существует свойство Context на классе System.Web.UI.Page, который вы скрываете (вы должны были получить предупреждение о времени компиляции).

+0

Отлично! Это работало безупречно. При именовании контекстной части я изменил ее, чтобы скрыть имя клиента, забыл о скрытии Контекста. Меня зовут [CustomerName] Context. Я изменю это в вопросе :) –

+0

Просто для тех, кто сталкивается с этим, если у вас уже есть App_Start.NinjectMVC3, вам также не нужен файл, который создает пакет NuGet для Ninject.Web. –