Quantcast
Channel: .NET Framework Class Libraries forum
Viewing all articles
Browse latest Browse all 8156

Null reference exception using Microsoft.Unity on DisposeOfChildContainer()

$
0
0

I am working on mvc application which also has webapi. Application is throwing System.NullReference Exception in production.

(MVC 5, WebApi 2.0, .Net 4.5, Unity 3.0)

Error message

System.NullReferenceException: Object reference not set to an instance of an object.

Stack trace

at Unity.Mvc5.UnityDependencyResolver.DisposeOfChildContainer()

at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

This is how the container is built and is called from Application_Start in global as UnityBootstrapper.Initialize(); -

public static class UnityBootstrapper
{
    public static void Initialize()
    {
        var container = BuildUnityContainer();
        DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));
        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
        ControllerBuilder.Current.SetControllerFactory(new UnityMvcControllerFactory(container));
    }
    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        // MVC/WebApi controller factories
        container.RegisterInstance<IHttpControllerActivator>(new UnityApiControllerActivator(container,
            new DefaultHttpControllerActivator()));

        // NHibernate sessions
        container.RegisterInstance<ISessionBuilder>(SessionBuilder.Instance);
        container.RegisterType<IClientCodeRequestContext, ClientCodeRequestContext>(
            new CurrentRequestContextLifetimeManager<IClientCodeRequestContext>());
        container.RegisterType<IUnitOfWork, UnitOfWork>(
            new CurrentRequestContextLifetimeManager<IUnitOfWork>(),
            new InjectionConstructor(container.Resolve<ISessionBuilder>()));
        container.RegisterType<IUnitOfWorkContext>(
            new InjectionFactory(c => container.Resolve<IUnitOfWork>().CommonContext));
        container.RegisterType<IUnitOfWorkClientContext>(
            new InjectionFactory(
                c => container.Resolve<IUnitOfWork>()[container.Resolve<IClientCodeRequestContext>().ClientCode]));
        //Repositories
        container.RegisterType<IUserRepository, UserRepository>();
        //Business Logic
        container.RegisterType<IMembershipPrincipalBusiness, MembershipPrincipalBusiness>();
        // Other
        container.RegisterType<IAuthenticationProvider, CoreMembershipProvider>();
        return container;
    }
}

In global.asax.cs-

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)

    {
        var principalBusiness = DependencyResolver.Current.GetService<IMembershipPrincipalBusiness>();
    }

The issue is in production only and is caught by newrelic.

Is the exception a bug in unity or something is missed in this implementation. I have been searching the issue since a week but could not get anything.




Viewing all articles
Browse latest Browse all 8156


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>