我有一个ICallHandler,我想要将它注册到所有我的Unity容器实例中。
例如,考虑以下处理程序:
我想要做的就是将这个处理程序注册到所有这些类型中。我可以使用一些冗长的代码来实现:
例如,考虑以下处理程序:
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;
}
}
下面是一个IoC容器的构造函数:
public class IoCContainer : UnityContainer
{
public IoCContainer()
{
this.RegisterType<IUserService, UserService>(new ContainerControlledLifetimeManager());
this.RegisterType<IRepository<User>, UserRepository>(new ContainerControlledLifetimeManager());
}
}
我想要做的就是将这个处理程序注册到所有这些类型中。我可以使用一些冗长的代码来实现:
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());
}
}
但是我不仅需要在所有类型注册上编写相同的拦截代码(如果我有100多个类型注册,想象一下),而且我还必须在每个接口上包含一个HandlerAttribute
(再次,如果我必须将其应用于100多个接口,那就不好了)。
这是我的唯一选择吗?还是有一种方法可以在容器级别上实现这一点,以避免必须将其应用于每个单独的类型注册和接口?