まず、Ninject1.5を使用しています。Webプロジェクトとクラスライブラリの2つのプロジェクトがあります。私のDI構成はWebプロジェクト内にあります。私のクラスライブラリ内で、次のように定義されています。
public interface ICacheService<T>
{
string Identifier { get; }
T Get();
void Set( T objectToCache, TimeSpan timeSpan );
bool Exists();
}
そして、CategoryCacheServiceと呼ばれる具象クラス。
私のWebプロジェクトでは、次の2つをバインドします。
Bind( typeof( ICacheService<List<Category>> ) ).To( typeof(CategoryCacheService)).Using<SingletonBehavior>();
私のクラスライブラリには、HtmlHelperクラスの拡張メソッドがあります。次に例を示します。
public static class Category
{
[Inject]
public static ICacheService<List<Category>> Categories { get; set; }
public static string RenderCategories(this HtmlHelper htmlHelper)
{
var c = Categories.Get();
return string.Join(", ", c.Select(s => s.Name).ToArray());
}
}
静的プロパティに挿入できないと言われましたが、代わりにKernel.Get <>()を使用する必要があります-しかし...上記のコードはクラスライブラリにあるため、カーネルにアクセスできません。この時点からカーネルを取得するにはどうすればよいですか、またはこれを行うためのより良い方法はありますか?