Mam ICallHandler, który chcę zarejestrować we wszystkich instancjach kontenera Unity.Zarejestruj to samo przechwytywanie Unity i program obsługi połączeń dla wszystkich zarejestrowanych typów.
Na przykład, weźmy następujące Handler:
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;
}
}
i następujące konstruktora kontenera IoC:
public class IoCContainer : UnityContainer
{
public IoCContainer()
{
this.RegisterType<IUserService, UserService>(new ContainerControlledLifetimeManager());
this.RegisterType<IRepository<User>, UserRepository>(new ContainerControlledLifetimeManager());
}
}
Wszystko co chcę zrobić, to zarejestrować ten moduł obsługi ze wszystkich tych typów.
mogę to zrobić w/jakiś dość gadatliwym kodu:
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());
}
}
Ale nie tylko muszę pisać tego samego kodu przechwytywania na wszystkie moje rejestracje typu (wyobraźcie sobie, że mam ponad 100 typów rejestracje) , ale muszę też dodać HandlerAttribute
na każdym interfejsie (znowu nie jest dobrze, jeśli mam ponad 100 interfejsów, żeby to zastosować).
Czy jest to moja jedyna opcja, czy istnieje sposób, aby to zrobić na poziomie kontenera, aby uniknąć konieczności stosowania tego do każdego indywidualnego interfejsu rejestracji typu &?
Dzięki Tuzo. Jesteśmy na .NET 4.0, więc jesteśmy ograniczeni do Unity 2.0. Przed opublikowaniem próbowałem uruchomić to za pomocą wtrysku zasad, ale nie mogłem go uruchomić. Zajmę się tym jeszcze trochę i jeśli nie będę w stanie tego zrobić z wtryskiem polityki, zaktualizuję oryginalny post z tym, co mam. –