Last active
December 15, 2015 17:39
-
-
Save tysonnero/5298270 to your computer and use it in GitHub Desktop.
Self-Host Web API and Controllers in Class Libraries with Autofac:
http://www.codemonkeez.com/2013/04/self-host-web-api-and-controllers-in.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class AutoFacConfig | |
{ | |
public static void Initialize(HttpConfiguration config) | |
{ | |
Initialize(config, RegisterServices(new ContainerBuilder())); | |
} | |
public static void Initialize(HttpConfiguration config, IContainer container) | |
{ | |
config.DependencyResolver = new AutofacWebApiDependencyResolver(container); | |
} | |
private static IContainer RegisterServices(ContainerBuilder builder) | |
{ | |
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); | |
// Services | |
builder.RegisterType<ProductsController>().InstancePerApiRequest(); | |
return builder.Build(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ProductsController : ApiController | |
{ | |
Product[] products = new Product[] | |
{ | |
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, | |
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, | |
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } | |
}; | |
public IEnumerable<Product> GetAllProducts() | |
{ | |
return products; | |
} | |
public Product GetProductById(int id) | |
{ | |
var product = products.FirstOrDefault((p) => p.Id == id); | |
if (product == null) | |
{ | |
throw new HttpResponseException(HttpStatusCode.NotFound); | |
} | |
return product; | |
} | |
public IEnumerable<Product> GetProductsByCategory(string category) | |
{ | |
return products.Where(p => string.Equals(p.Category, category, | |
StringComparison.OrdinalIgnoreCase)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var config = new HttpSelfHostConfiguration("http://localhost:8080"); | |
config.Routes.MapHttpRoute( | |
"API Default", | |
"api/{controller}/{id}", | |
new { id = RouteParameter.Optional } | |
); | |
AutoFacConfig.Initialize(config); | |
using (HttpSelfHostServer server = new HttpSelfHostServer(config)) | |
{ | |
server.OpenAsync().Wait(); | |
System.Console.WriteLine("Press Enter to quit."); | |
System.Console.ReadLine(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment