InRequestScope провайдері (Custom ViewEngine үшін) тек бір рет appstart деп аталады

Мен өзімнің MVC веб-сайтыма тапсырыс берушінің ViewEngine енгізуін қалаймын. Мен мұны істеймін:

private static IKernel CreateKernel()
{
   kernel.Bind().ToProvider(new RazorViewEngineProvider()).InRequestScope();
}

Бұл менің провайдерім:

public class RazorViewEngineProvider : Provider
{
    protected override RazorViewEngine CreateInstance(IContext context)
    {
        return new RazorViewEngine();
    }
}

Мәселе мынада: Мен бірінші рет веб-сайтқа кірген кезде провайдерім тек бір рет аталады. Келесі провайдерім кэште әлі де болса. Бұл мен қалаған нәрсе емес.

Мен провайдердің әр сұрау бойынша орындауын қалаймын. Мен мұны мен .RequestScope() көмегімен жасауға болатын деп ойладым, бірақ бұл ешқандай айырмашылықты жасамайды. Біреулері не болып жатқанын біле ме?

1

2 жауаптар

Бұл жағдайда Nissan инкубаторы кэштелмейді. Бұл MVC-ның өзі, ол әрдайым IDependencyResolver-тен сұрамайды. Бірақ бұл дұрыс мінез деп ойлаймын. Осылайша, ол кем дегенде оны қайта пайдалану арқылы көру механизмін жасауды қамтамасыз етеді.

Көру механизміңізге тәуелді тәуелділікке сұрауыңыз болмауы керек. Тәуелділіктің осы түрі көзқарас үлгісінен алынып, бақылаушы тарапынан тағайындалуы керек.

Және InRequestScope жою керек. Әйтпесе, ол бірінші сұранымнан кейін Ниньюктің қолына түседі, бірақ MVC оны қайта пайдалануға тырысады.

1
қосылды
Мен бірнеше теннистік веб-сайт үшін кейбір нәрселерді тырысамын. Мен әртүрлі тақырыптарға ие болғым келеді. Сондықтан әрбір теннистің өзінің меншікті CSS және masterpage бар. Мен әр сұраным бойынша тентенді табуды жақсы деп ойладым және онымен қарап шығуды жөн көрдім.
қосылды автор user369117, көзі

Керісінше, пайдаланушы көрінетін қозғалтқышты енгізу орнына Application_Start() пайдаланып көріңізші:

protected void Application_Start()
{
   ViewEngines.Engines.Clear();
   ViewEngines.Engines.Add(new RazorViewEngineProvider());
   RegisterRoutes(RouteTable.Routes);
}

Тіркеуді осылай жасаған кезде не болады? Ол жұмыс істей ме?

0
қосылды
Ия, мұндай жұмыс істейді. Бірақ бұл мен қалаған нәрсе емес. Мен әрбір ViewEngine тілегімді жаңартқым келеді. Мен BeginRequest ең өзекті болып табылатын global_asax әдістеріне қарадым. Бірақ мен Ninject-дан тәуелділікті қолданғым келеді, мен global_asax-дан Ninject Kernel-ге жете алмаймын.
қосылды автор user369117, көзі
Мен сіздің мәселеңізді қайталағандықтан, шынымен CreateInstance әдісі де маған бір рет шақырылады. Бұл туралы қорықпаймын.
қосылды автор Jason Evans, көзі