Skip to content

Instantly share code, notes, and snippets.

@blair55
Created November 7, 2012 22:35
Show Gist options
  • Save blair55/4034984 to your computer and use it in GitHub Desktop.
Save blair55/4034984 to your computer and use it in GitHub Desktop.
WebAPI ActionFilter Dependency Injection with StructureMap
using System;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using Raven.Client;
namespace MyWebApi.Attributes
{
public class AggressivelyCacheAttribute : ActionFilterAttribute
{
public IDocumentStore DocumentStore { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(10));
}
}
}
public static class IoC
{
public static IContainer Initialize()
{
var documentStore = new DocumentStore { ConnectionStringName = "RavenDB" };
documentStore.Initialize();
ObjectFactory.Initialize(cfg =>
{
cfg.For<IFilterProvider>().Use<SmFilterProvider>();
cfg.For<IDocumentStore>().Use(documentStore);
cfg.FillAllPropertiesOfType<IDocumentStore>();
});
return ObjectFactory.Container;
}
}
public class SmFilterProvider : ActionDescriptorFilterProvider, IFilterProvider
{
private readonly IContainer _container;
public SmFilterProvider(IContainer container)
{
_container = container;
}
public IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
var filters = base.GetFilters(configuration, actionDescriptor);
foreach (var filter in filters)
{
_container.BuildUp(filter.Instance);
}
return filters;
}
}
@bdaniel7
Copy link

It this working? I'm getting this error:

Bi-directional dependency relationship detected! Check the StructureMap stacktrace below:
1.) new StructureMapFilterProvider(Default of IContainer, Enumerable of System.Web.Http.Filters.IFilterProvider with all registered instances)
2.) StructureMapFilterProvider
3.) Instance of System.Web.Http.Filters.IFilterProvider (StructureMapFilterProvider)
4.) Container.GetAllInstances(System.Web.Http.Filters.IFilterProvider)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment