Stanley Goosebump Stanley Goosebump - 25 days ago 18
C# Question

EnableInterfaceInterceptors not available from Autofac RegisterType

I want to explore custom Interceptors using Autofac. I'm currently using version 4.2.0 of Autofac and version 3.3.3 of Castle.Core for DynamicProxy.

I've started out with the following basic act of wanting to register a test class with its interface in Autofac:

using Autofac;
using Castle.DynamicProxy;

class Program
{
static void Main(string[] args)
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<MyClassA>()
.As<IMyInterface>()
.EnableInterfaceInterceptors()
.InterceptedBy(typeof(MyInterceptor));
builder.RegisterType<MyInterceptor>().AsSelf();
var container = builder.Build();
}
}


The problem is that the ".EnableInterfaceInterceptors()" line has a red error squiggly line underneath it with the following error:

'IRegistrationBuilder<MyClassA, ConcreteReflectionActivatorData, SingleRegistrationStyle>' does not contain a definition for 'EnableInterfaceInterceptors' and no extension method 'EnableInterfaceInterceptors accepting a first argument of type 'IRegistrationBuilder<MyClassA, ConcreteReflectionActivatorData, SingleRegistrationStyleA>' could be found (are you missing a using directive or an assembly reference?)


The code to the other components so far (in case it's relevant) is:

public interface IMyInterface
{
void DoWork(string key1, string key2);
}


using System;

public class MyClassA : IMyInterface
{
public void DoWork(string key1, string key2)
{
Console.WriteLine(string.Format("A: {0} - {1}", key1, key2));
}
}


using System;
using Castle.DynamicProxy;

public class MyInterceptor : StandardInterceptor
{
protected override void PreProceed(IInvocation invocation)
{
Console.Write("PreProceed: ");
}
}


Can somebody tell me why the
.EnableInterfaceInterceptors()
is not working please?

Answer

I'm guessing you forgot to reference the Autofac.Extras.DynamicProxy package. See the docs here.