2012-01-02 10 views
1

私はWebアプリケーションでNinjectを使用しています。これの一部として、別のアセンブリにあるUrlHelper拡張メソッドでいくつかの注入を行う必要があります。明らかにライブラリアセンブリは私のWebアプリケーションを参照することはできません(また、そうする必要があります)ので、私はカーネルへの静的参照を取得することすらできません。静的クラスはDIでうまく動作しないことは分かっていますが、UrlHelperを使用する必要があるため、少し複雑になります。どのように私はこれを再構築できますか?コードを参照する必要がある場合や、より多くの情報が必要な場合はお知らせください。UrlHelperによる依存性注入

+1

なぜ静的メソッドに値を注入する必要がありますか?これらの値を_UrlHelper_を呼び出すクラスに挿入することはできませんし、これらの注入された値を使用して静的(拡張)メソッドを直接呼び出すのではなくメソッドを呼び出しますか? –

答えて

4

静的でないクラスを静的なUrlHelperクラスのDI対応ラッパーとみなしましたか?

public class DynamicUrlHelper 
{ 
    private readonly ISomeDependency dep; 
    public DynamicUrlHelper(ISomeDependency dep) 
    { 
    this.dep = dep; 
    } 
    public Uri DoMagic(Uri uri) 
    { 
    return uri.DoMagic(this.dep); 
    } 
} 
public interface ISomeDependency 
{ 
} 
public static class UrlHelper 
{ 
    public static Uri DoMagic(this Uri uri, ISomeDependency dep) 
    { 
    // do it! 
    return uri; 
    } 
} 

あなたはDynamicUrlHelperに必要な値を注入し、どこでもそれが必要とされるDynamicUrlHelperを注入することができます。