private static void BuildContainer(IContainerBuilder container, ApplicationConfiguration appConfig, HttpConfiguration config)
        {
            container.AddService(ServiceLifetime.Singleton, sp => appConfig);
            container.AddService <ODataUriResolver>(ServiceLifetime.Singleton, sp => new UnqualifiedODataUriResolver());

            container.AddService(ServiceLifetime.Singleton, sp =>
            {
                var conventions = ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", config);
                conventions.Insert(0, new UnboundFunctionsConvention());
                //conventions.Insert(0, new AnyNavigationRoutingConvension());
                conventions.Insert(0, new SingleEntityRoutingConvention());
                return(conventions.AsEnumerable());
            });

            var controllers = appConfig.ConfigureModel.Method.DeclaringType.Assembly.ExportedTypes
                              .Where(t => !t.IsAbstract)
                              .Where(typeof(ODataController).IsAssignableFrom).ToList();

            container.AddService <MetadataController>(ServiceLifetime.Transient);
            container.AddService <ExtendedMetadataController>(ServiceLifetime.Transient);

            container.AddService <FilterBinder, ExtendedFilterBinder>(ServiceLifetime.Singleton);
            ExtendedFilterBinder.RegisterCustomFunctions();

            var builder = new ODataConventionModelBuilder();

            builder.Namespace = typeof(Service).Namespace;
            builder.EnableLowerCamelCase();
            builder.ContainerName = "DefaultContainer";
            var entitySetFactory = builder.GetType().GetMethod("EntitySet");

            foreach (var controller in controllers)
            {
                container.AddService(ServiceLifetime.Transient, controller);

                var modelType = GetControllerBaseModel(controller);

                if (modelType != null)
                {
                    var setName = controller.Name.Replace("Controller", "");
                    entitySetFactory.MakeGenericMethod(modelType).Invoke(builder, new object[] { setName });
                }
            }



            builder.Function(Constants.ValidationFunctionName).Returns <ValidationEntityDocument>();
            //builder.Function(Constants.GenerateFunctionName).Returns<IHttpActionResult>();
            appConfig.ConfigureModel(builder);
            appConfig.Register(container);

            var model = builder.GetEdmModel();

            container.AddService(ServiceLifetime.Singleton, sp => model);
        }