Ich habe einen ICallHandler, den ich bei allen Unity-Container-Instanzen registrieren möchte.Registrieren Sie diese Unity-Abhör- & Call-Handler für alle registrierten Typen.
Zum Beispiel, nehmen Sie die folgende Prozedur:
public class ProfilerHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
//start timer
IMethodReturn methodReturn = getNext()(input, getNext);
//stop timer
}
public int Order
{
get; set;
}
}
und den folgenden IoC-Container-Konstruktor:
public class IoCContainer : UnityContainer
{
public IoCContainer()
{
this.RegisterType<IUserService, UserService>(new ContainerControlledLifetimeManager());
this.RegisterType<IRepository<User>, UserRepository>(new ContainerControlledLifetimeManager());
}
}
Alles, was ich tun möchte, ist diese Prozedur registriert mit all diesen Typen.
Ich kann dies tun w/einig ziemlich ausführlichen Code:
public class IoCContainer : UnityContainer
{
public IoCContainer()
{
this.AddNewExtension<Interception>();
this.RegisterType<IUserService, UserService>(new ContainerControlledLifetimeManager()).Configure<Interception>().SetInterceptorFor<IUserService>(new InterfaceInterceptor());
this.RegisterType<IRepository<User>, UserRepository>(new ContainerControlledLifetimeManager()).Configure<Interception>().SetInterceptorFor<IRepository<User>>(new InterfaceInterceptor());
}
}
Aber nicht nur tun, ich habe den gleichen Interception-Code auf all meine Art Registrierungen schreiben (ich vorstellen, wenn ich mehr als 100 Typen Registrierungen habe) , aber ich muss auch eine HandlerAttribute
auf jeder Schnittstelle (wieder, nicht gut, wenn ich 100+ Schnittstellen haben, um dies zu verwenden).
Ist dies meine einzige Option, oder gibt es eine Möglichkeit, dies auf Container-Ebene zu tun, um zu vermeiden, dass dies auf jede einzelne Typ-Registrierung & Schnittstelle angewendet werden muss?
Danke Tuzo. Wir arbeiten mit .NET 4.0 und sind daher auf Unity 2.0 beschränkt. Vor der Veröffentlichung versuchte ich, dies mithilfe von Policy Injection zu erreichen, konnte es aber nicht zum Laufen bringen. Ich werde es ein wenig genauer betrachten und wenn ich es nicht mit Policy Injection funktioniere, werde ich den ursprünglichen Post mit dem was ich habe aktualisieren. –