1

私には小さな問題があります。うまくいけば、あなたは私が遅れをとるのを手伝ってくれるでしょう。

を使用しておりMvcSiteMapProvider、サービスインターフェイスを介したDBへのアクセスを使用して、各ノードの可視性を定義したいと思います。

 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"])
        
    }
}

ただし、私の_SecurityServiceメンバーは常にnullです。助言がありますか?私は注射をやめたり、別の道を進んだりするなど、あらゆる種類の指示を受け入れます。

4

2 に答える 2

1

この場合、Ninject は の作成を管理していないためです( ISecurityServiceMVCアプリでは、Ninject はコントローラーの作成を管理するため、コントローラーのルートから配線された依存関係を解決します - コントローラーを作成するための既定の方法をオーバーライドします)。nullMvcSiteMapProvider

問題を解決するためのオプション:

1) Ninject をサービス ロケータとして使用します。お勧めしません!アンチパターンであると広く考えられているため(ただし、場合によって異なります...)

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

2)同様の質問に対するR. Gloorの回答を読んでください: MVC3、Ninject、MvcSiteMapProvider - オーバーライドされたメソッドに依存関係を注入し、彼のやり方で行う方法。

于 2013-01-21T09:29:00.963 に答える
0

ことを確認してください

  1. siteMapNodeVisibilityProvider はweb.config で構成されていません
  2. のバインディングがありますISiteMapNodeVisibilityProvider
于 2013-01-21T09:42:25.293 に答える