How to integrate WebApi 2 with Spring.Net

戏子无情 提交于 2019-12-07 19:39:17

问题


Im trying to integrate WebApi 2 with Spring.Net with not success. This is what i have tried:

public class MvcApplication : SpringMvcApplication
{
    protected void Application_Start()
    {
        XmlConfigurator.Configure();

        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

When is creating the SpringWebApiDependencyResolver instance, i'm getting this exception:

Error creating context 'spring.root': Request is not available in this context

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.DependencyResolver = new SpringWebApiDependencyResolver(ContextRegistry.GetContext());

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Im using Spring.Net 2.0.1


回答1:


Now is working, the following line was not needed:

config.DependencyResolver = new SpringWebApiDependencyResolver(ContextRegistry.GetContext());

This is my implementation based on Spring.Net example:

public class MvcApplication : SpringMvcApplication
{
    protected void Application_Start()
    {
        // More config...
        GlobalConfiguration.Configure(WebApiConfig.Register);
        // More config...
    }

    protected override System.Web.Http.Dependencies.IDependencyResolver BuildWebApiDependencyResolver()
    {
        var resolver = base.BuildWebApiDependencyResolver();

        var springResolver = resolver as SpringWebApiDependencyResolver;

        if (springResolver != null)
        {
            var resource = new AssemblyResource(
                "assembly://assemblyName/namespace/ChildControllers.xml");
            springResolver.AddChildApplicationContextConfigurationResource(resource);
        }

        return resolver;
    }
}

I prefered to keep the common WebApi configuration:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

For registration of controllers in the IoC container is the same as MVC integration:

<object type="namespace.PrefixController, assemblyName" singleton="false" >
    <property name="Dependency1" ref="Dependency1" />
</object>


来源:https://stackoverflow.com/questions/29930847/how-to-integrate-webapi-2-with-spring-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!