0

I have a working WCF application hosted in IIS (.svc), using Ninject (Ninject.Web.Common) for dependency injection. All is well and good, works great. However I am trying to implment interception on the service endpoints and am getting a ServiceActiviationException. I've included the ninject extensions for wcf, interception, and interception.dynamic proxy as well as castle.core, so I'm not really sure what I'm missing here. Any ideas?

UPDATE: I was able to get past the service validation exception but I am now getting the following error:

Can not instantiate proxy of class: MyNameSpace.CustomerService.
Could not find a parameterless constructor.

My NinjectWebCommon contents:

public class NinjectWebCommon
{
    private static readonly Bootstrapper Bootstrapper = new Bootstrapper();

    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        Bootstrapper.Initialize(CreateKernel);
    }

    public static void PostStart()
    {
        // Inject the WITS Application Security service into the ApplicationSecurityRoleProvider
        //_kernel.Inject(Roles.Provider);
    }

    public static void Stop()
    {
        Bootstrapper.ShutDown();
    }

    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel(
            new AutoMapperModule(), 
            new CustomerServiceModule(), 
            new AccountServiceModule());
        try
        {
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
            RegisterServices(kernel);
            return kernel;
        }
        catch
        {
            kernel.Dispose();
            throw;
        }
    }

    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<LoggingInterceptor>().ToSelf().InRequestScope();
        kernel.Bind<CustomerService>().ToSelf().Intercept().With<LoggingInterceptor>();

    }

And a simple interceptor (Ive tried this also just implementing IInterceptor to no avail):

public class LoggingInterceptor : SimpleInterceptor
{
    /// <summary>
    /// Intercepts the specified invocation.
    /// </summary>
    /// <param name="invocation">The invocation to intercept.</param>
    protected override void BeforeInvoke(IInvocation invocation)
    {
        Debug.WriteLine("Running " + invocation.ReturnValue);
        base.BeforeInvoke(invocation);
    }

    public new void Intercept(IInvocation invocation)
    {
        try
        {
            base.Intercept(invocation);
        }
        catch (Exception e)
        {
            Debug.WriteLine("Exception: " + e.Message);
        }
    }

    protected override void AfterInvoke(IInvocation invocation)
    {
        Debug.WriteLine("After Method");
        base.AfterInvoke(invocation);
    }

}
Brandon
  • 830
  • 1
  • 15
  • 35
  • Have you activated all http and wcf modules? – Hameed Syed Feb 08 '18 at 02:53
  • As far as I know... The application works fine otherwise as I mentioned. I tried adding the DynamicProxyModule in the StandardKernel constructor but it says it's already loaded. – Brandon Feb 08 '18 at 14:28

0 Answers0