4

次のコードを検討してください。

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) 誤って複数のカーネルを作成していないことを確認してください。

どうすれば解決できますか?

4

1 に答える 1

5

ほとんどの場合、Ninject.Extensions.Interception を追加しましたが、具体的な実装Ninject.Extensions.Interception,DynamicProxyまたはNinject.Extensions.Interception,LinFuは追加していません。

于 2013-08-30T14:42:39.660 に答える