次のコードを検討してください。
public class IocConfig
{
protected static StandardKernel Kernel { get; set; }
public static void RegisterIoc(HttpConfiguration config)
{
using (IKernel kernel = new StandardKernel())
{
RegisterDependency();
config.DependencyResolver = new NinjectDependencyResolver(kernel);
}
}
public static void RegisterIoc()
{
RegisterDependency();
}
private static void RegisterDependency()
{
if (Kernel == null)
{
Kernel = new StandardKernel();
}
Kernel.Bind<CallCenterLogger>().ToSelf().Intercept().With(new TimingInterceptor());
}
public static T GetType<T>()
{
RegisterDependency();
return Kernel.Get<T>();
}
}
この行で:
Kernel.Bind<CallCenterLogger>().ToSelf().Intercept().With(new TimingInterceptor());
次のエラーが表示されます。
Ninject コンポーネント IAdviceFactory のロード中にエラーが発生しました
そのようなコンポーネントは、カーネルのコンポーネント コンテナーに登録されていません。
提案:
1) KernelBase のカスタム サブクラスを作成した場合は、適切に作成されていることを確認してください。
implemented the AddComponents() method.
2) RemoveAll() の呼び出しによってコンテナからコンポーネントを削除していないことを確認してください。
3) 誤って複数のカーネルを作成していないことを確認してください。
どうすれば解決できますか?