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ď č. 1tvoj 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
- SiteMapNodeVisibilityProvider je NOT nakonfigurovaný v web.config
- Existuje záväzok pre
ISiteMapNodeVisibilityProvider