Reputation: 35213
Despite only regestering my own mvc controllers in my Umbraco solution, simple injector seems to affect Umbraco's backoffice controllers too. If I run the snippet below, the Umbraco backoffice controllers are getting exceptions, similar to the problems in this thread.
Do I need to add something like a custom controller activator too?
protected void Application_Start(object sender, EventArgs e) {
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
var registeredControllerTypes =
SimpleInjectorMvcExtensions.GetControllerTypesToRegister(
container, Assembly.GetExecutingAssembly())
.Where(type => type.IsSubClassOf(typeof(MyController)));
foreach (var controllerType in registeredControllerTypes)
{
container.Register(controllerType, controllerType, Lifestyle.Transient);
}
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
Upvotes: 1
Views: 137
Reputation: 35213
Solved with an updated version of @Steven's comment:
public class UmbracoConstructorBehavior : IConstructorResolutionBehavior
{
public IConstructorResolutionBehavior DefaultBehavior { get; set; }
public ConstructorInfo GetConstructor(Type implementationType)
{
return implementationType.Namespace != null
&& implementationType.Namespace.Contains("Umbraco")
? GetUmbracoConstructor(implementationType)
: DefaultBehavior.GetConstructor(implementationType);
}
private ConstructorInfo GetUmbracoConstructor(Type i) =>
i.GetConstructors().OrderBy(c => c.GetParameters().Length).FirstOrDefault()
?? DefaultBehavior.GetConstructor(i);
}
Upvotes: 3