ASP.NET Web API 2 with Autofac Owin

2016/2/292 min read
bookmark this
Responsive image

This blog shows how to setup Autofac at ASP.NET Web API 2 with Owin.

packages.config

Following is the package.config, you can use this nuget command to install all the these to your project.Update-Package -ProjectName MyProject -reinstall

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Autofac" version="3.5.0" targetFramework="net452" />
  <package id="Autofac.Owin" version="3.1.0" targetFramework="net452" />
  <package id="Autofac.WebApi" version="3.1.0" targetFramework="net452" />
  <package id="Autofac.WebApi2" version="3.4.0" targetFramework="net452" />
  <package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
  <package id="Owin" version="1.0" targetFramework="net452" />
</packages>

Startup class

using Autofac;
using Autofac.Integration.WebApi;
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Compilation;
using System.Web.Http;
using WebApplication2.Controllers;

[assembly: OwinStartup(typeof(WebApplication2.Startup))]
namespace WebApplication2
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
// register api routing. WebApiConfig.Register(config); app.UseWebApi(config); var builder = new ContainerBuilder(); var assemblies = BuildManager.GetReferencedAssemblies().Cast().ToArray();
builder.RegisterAssemblyModules(assemblies); builder.RegisterApiControllers(assemblies); var container = builder.Build(); config.DependencyResolver = new AutofacWebApiDependencyResolver(container); app.UseAutofacMiddleware(container); app.UseAutofacWebApi(config); app.UseWebApi(config); } } }

API Controller class: TestController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebApplication2.Controllers
{
    public class TestController : ApiController
    {
        Interface1 _i;
        public TestController(Interface1 i)
        {
            _i = i;
        }

        public IHttpActionResult Get()
        {
           
            return Ok<IList>(new List() { "Hi", "I", "'m", "Just", "testing" });
        }
    }
}

Interface

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WebApplication2
{
    public interface Interface1
    {
        string Do();
    }
}

class implement interface

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
    public class Class1 : Interface1
    {
        public string Do()
        {
            return Guid.NewGuid().ToString();
        }
    }
}

Autofac Service Module

using Autofac;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
    public class ServiceModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType().As().InstancePerDependency();
        }
    }
}