seesharper / LightInject.Interception

LightInject.Interception supports Aspect Oriented Programming through proxy-based method interceptors.
11 stars 7 forks source link

"Value cannot be null. Parameter name: meth" since 2.0.2 #21

Open diplomegalo opened 5 years ago

diplomegalo commented 5 years ago

Hi,

An error occur since we upgrade from the version 2.0.1 to 2.0.2.

We are using LightInject v5.1.6

This are the way we use the interception

public static void Register(HttpConfiguration config)
        {
            var container = new ServiceContainer();

            RegisterInjection(container);

            container.EnablePerWebRequestScope();
            container.ScopeManagerProvider = new PerLogicalCallContextScopeManagerProvider();
            container.RegisterApiControllers();
            container.EnableWebApi(GlobalConfiguration.Configuration);
        }

        private static void RegisterInjection(ServiceContainer container)
        {
            // Register business layer
            container.Register<ICriteriaDomain, CriteriaDomain>();
            ...

            // Register data layer
            container.Register<ICriteriaRepository, CriteriaRepository>(new PerRequestLifeTime());
            ...

           // Register container itself
            container.RegisterInstance<IServiceContainer>(container);

            // Intercept
            container.Intercept(sr => sr.ServiceType == typeof(ICriteriaDomain), factory => new LogErrorsInterceptor());

            container.Intercept(sr => sr.ServiceType == typeof(ICriteriaRepository), factory => new RefreshViewInterceptor());
        }

and there are interceptors :

public object Invoke(IInvocationInfo invocationInfo)
{
            var output = invocationInfo.Proceed();

            if (invocationInfo.Method.Name.Contains("Create") || invocationInfo.Method.Name.Contains("Update") ||
                invocationInfo.Method.Name.Contains("Delete") || invocationInfo.Method.Name.Contains("Add"))
            {
                // Refresh
                ...
            }

            return output;
}
public object Invoke(IInvocationInfo invocationInfo)
{
            try
            {
                return invocationInfo.Proceed();
            }
            catch (Exception ex)
            {
                log.Error(...);
                throw;
            }
}

Could you help me please ?

Thank for help.

Diplomegalo