/ / Vstrekovanie pomocou aplikácie NInject v ISiteMapNodeVisibilityProvider - asp.net-mvc-3, ninject, mvcsitemap

Injekcia pomocou aplikácie NInject v ISiteMapNodeVisibilityProvider - asp.net-mvc-3, ninject, mvcsitemap

Dobrý deň, stackoverflow komunita!

Mám malý problém, ktorý, dúfajme, mi pomôže zastaviť.

Používam nástroj MvcSiteMapProvider a chcem definovať viditeľnosť pre každý uzol pomocou prístupu k db cez servisné rozhranie.

 public class AreaSiteMapNodeVisibilityProvider : MvcSiteMapProvider.Extensibility.ISiteMapNodeVisibilityProvider
{
[Inject]
public ISecurityService _SecurityService {get;set;}
public AreaSiteMapNodeVisibilityProvider()
{

}
public bool IsVisible(SiteMapNode node, HttpContext context, IDictionary<string, object> sourceMetadata)
{
MvcSiteMapNode thisNode = node as MvcSiteMapNode;
return _SecurityService.CalculateNodeVisibility(thisNode,context.Cache["someValueIHaveStoredHere"])

}

Môj člen služby _SecurityService je však vždy nulový. Nejaké návrhy? Prijímam akýkoľvek druh pokynov, vrátane toho, aby som sa zbavil svojej injekcie a šiel iným spôsobom.

Vopred ďakujem,

Silviu.

PS: Som vždy k dispozícii pre ďalšie informácie, len pokračujte a opýtajte sa. Opäť, 10q. }

odpovede:

1 pre odpoveď č. 1

tvoj ISecurityService je null, pretože v tomto prípade Ninject neriadi vytvorenie MvcSiteMapProvider (v aplikácii MVC, Ninject rieši závislosti pripojené k ovládaču koreň, pretože spravuje vytváranie riadiacich prvkov - prepisuje predvolenú metódu pre tvorcov tvorby).

Možnosti na vyriešenie problému:

1) Použite službu Ninject ako vyhľadávač služieb. Neodporúčané!, pretože sa všeobecne považuje za anti-vzor (ale záleží ...).

var app = HttpContext.ApplicationInstance as NinjectHttpApplication;
var service = app.Kernel.Get<ISecurityService>();

2) prečítať R. Gloor "s odpoveď na podobnú otázku: MVC3, Ninject, MvcSiteMapProvider - Ako podávať závislosť na prepísanú metódu a robiť to svojou cestou.


0 pre odpoveď č. 2

Uistite sa, že

  1. SiteMapNodeVisibilityProvider je NOT nakonfigurovaný v web.config
  2. Existuje záväzok pre ISiteMapNodeVisibilityProvider