Ninject: ninject.web - Как подать заявку на обычный веб-сайт ASP.Net (! MVC) - PullRequest
1 голос
/ 17 июня 2010

Что-то похожее на приведенное ниже (http://github.com/ninject/ninject.web.mvc):

README.markdown

Это расширение позволяет интегрировать ядро ​​Ninject и ASP.NETПроекты MVC. Чтобы использовать его, просто сделайте свое HttpApplication (обычно в Global.asax.cs) расширяющим NinjectHttpApplication:

открытый класс YourWebApplication: NinjectHttpApplication {public override void OnApplicationStarted ()
{//Это необходимо только в MVC1 RegisterAllControllersIn ("Some.Assembly.Name");}

public override IKernel CreateKernel () {вернуть новый StandardKernel (new SomeModule (), new SomeOtherModule (), ...);

// OR, to automatically load modules:

var kernel = new StandardKernel();
kernel.AutoLoadModules("~/bin");
return kernel;   } }

Как только вы это сделаете, ваши контроллеры будут активированы через Ninject, то есть вы можете выставить зависимости от их конструкторов (или свойств, или методов) для запроса инъекций.

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Просто хочу поделиться, как я решил это с помощью Visual Studio 2008

Для тех из вас, ребята, которые были на сайте www.tekpub.com, приведенный ниже код довольно знаком, да!Ваш правильный код ниже взят из серии Mastering ASP.NET MVC 2.0 и демонстрирует, как использовать NLog

Необходимая ссылка:

  • Ninject.dll
  • Ninject.Web
  • NLog.dll

Global.asax:

<%@ Application Language="C#" Inherits ="Ninject.Web.NinjectHttpApplication"  %>
<%@ Import Namespace="App_Code.Infrastructure.Logging"%>
<%@ Import Namespace="Ninject.Modules"%>
<%@ Import Namespace="Ninject"%>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup

    }

    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown

    }

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.

    }


    protected override void OnApplicationStarted()
    {
        //base.OnApplicationStarted();

        Container.Get<ILogger>().Info("Application Started");
    }

    protected override IKernel CreateKernel()
    {
        return Container;
    }

    static IKernel Container
    {
        get
        {
            return new StandardKernel(new SiteModule());
        }

    }

    class SiteModule : NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<NLogger>().InSingletonScope();
        }
    }

</script>
1 голос
/ 23 июня 2010

Поскольку вы не исключили этого в своем вопросе, я должен предположить, что вы не знаете веб-форм, эквивалентных приведенному вами

(связано с индекс Ninject расширений на домашнем сайте )

...