2013-04-29 10 views
8

Ich habe eine Autofac als IoC-Container. Ich möchte Aspect für einige Typen registrieren. Ich kann es wie folgt tun:Autofac, wie man den Dienst mit einer Instanz eines Aspekts abfängt, aber nicht mit der Art des Aspekts?

build.RegisterType(myType).As(ImyType).EnableInterfaceInterceptors().InterceptedBy(typeof(Aspect)); 

Aber was, wenn ich brauche die Abfangjäger in die eine gewisse Menge an Klassen registrieren Verwendung kein Typ der Abfangjäger, aber es ist Instanz. Lass uns schauen, wie ich denke, dass es so aussehen sollte:

Aspect aspectInstance = new Aspect("some data to constructor") 
build.RegisterType(myType).As(ImyType).EnableInterfaceInterceptors().InterceptedBy(aspectInstance); 

Ich tat so mit Ninject IoC. Aber was ist mit Autofac? Thx für jeden Fortschritt!

Antwort

9

Auschecken the Autofac wiki page on Autofac.Extras.DynamicProxy2. Es zeigt ein Beispiel eines CallLogger Abfangjäger, wo es eine Lambda als Abfangjäger registriert:

var builder = new ContainerBuilder(); 
builder.RegisterType<SomeType>() 
     .As<ISomeInterface>() 
     .EnableInterfaceInterceptors(); 
builder.Register(c => new CallLogger(Console.Out)); 
var container = builder.Build(); 
var willBeIntercepted = container.Resolve<ISomeInterface>(); 

Für Ihren Fall nur einschalten, eine Instanz zu registrieren.

Alternativ können Sie benannte Interzeptoren verwenden, wenn Sie nicht möchten, dass Ihr Aspekt getippt wird.

var builder = new ContainerBuilder(); 
builder.RegisterType<SomeType>() 
     .As<ISomeInterface>() 
     .EnableInterfaceInterceptors() 
     .InterceptedBy("my-aspect-instance"); 
var interceptor = new Aspect(); 
builder.RegisterInstance(interceptor) 
     .Named<IInterceptor>("my-aspect-instance"); 
var container = builder.Build(); 
var willBeIntercepted = container.Resolve<ISomeInterface>(); 

Wieder check out the wiki - es gibt viele Möglichkeiten, um die Abfangjäger mit der Klasse zuzuordnen abgefangen werden, einschließlich Namen, getippt, Attribute ... viele Proben auf dem Wiki.

+1

Thx viel, dieser hilft. – Maris