简单的注射器,功能不被拦截?

Ton*_*ony 3 c# aop cross-cutting-concerns simple-injector

我试图在我的控制器上拦截我的电话,但由于某种原因他们没有被截获.

我基本上试图让这里的例子起作用:http: //simpleinjector.readthedocs.org/en/latest/InterceptionExtensions.html

他们在拦截部分也有一些其他信息:http: //simpleinjector.readthedocs.org/en/latest/advanced.html

我有一种感觉,因为我没有正确设置容器.有人可以告诉我如何"Intercepted!!!"在控制器上的调用完成之后更改我的主要内容吗?此外,有人可以告诉我Container的设置是否错误,如果是,请解释我的错误.

代码:

static void Main()
{
    Console.WriteLine("Start");    

    RedisController2 redisController = new RedisController2();    

    Container _container = new Container();
    _container.InterceptWith<MonitoringInterceptor>(type => type == typeof(IRedisController2));
    _container.RegisterSingle<MonitoringInterceptor>();    

    redisController.PrintSomething();
    redisController.PrintOther();    

    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

internal class MonitoringInterceptor : IInterceptor
{    

    public MonitoringInterceptor()
    {    

    }    

    public void Intercept(IInvocation invocation)
    {
        invocation.Proceed();    

        //var decoratedType = invocation.InvocationTarget.GetType();    

        Console.Write("Intercepted!!!");
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

quj*_*jck 5

问题是由于Container没有创建Controller,因此无法拦截对它的调用.试试这个:

Console.WriteLine("Start");    

Container _container = new Container();
_container.Register<IRedisController2, RedisController2>(); // 1
_container.InterceptWith<MonitoringInterceptor>(type => 
    type == typeof(IRedisController2));
_container.RegisterSingle<MonitoringInterceptor>();    

IRedisController2 redisController =
    _container.GetInstance<IRedisController2>(); // 2, 3

redisController.PrintSomething();
redisController.PrintOther();    

Console.WriteLine("Press any key to exit.");
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

请注意,我有:

  1. 添加了注册Controller的代码
  2. 添加了从Container请求Controller实例的代码
  3. 将创建的类型更改RedisController2IRedisController2(因为IRedisController2已经为拦截配置了什么)