C# 防止简单喷油器与Umbraco控制器冲突

C# 防止简单喷油器与Umbraco控制器冲突,c#,umbraco,simple-injector,C#,Umbraco,Simple Injector,尽管在我的Umbraco解决方案中只重新设置了我自己的mvc控制器,但简单的注入器似乎也会影响Umbraco的后台控制器。如果我运行下面的代码段,Umbraco backoffice控制器将出现异常,类似于中的问题 我是否也需要添加自定义控制器激活器之类的东西 protected void Application_Start(object sender, EventArgs e) { var container = new Container(); container.Opti

尽管在我的Umbraco解决方案中只重新设置了我自己的mvc控制器,但简单的注入器似乎也会影响Umbraco的后台控制器。如果我运行下面的代码段,Umbraco backoffice控制器将出现异常,类似于中的问题

我是否也需要添加自定义控制器激活器之类的东西

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));
}

通过更新版本的@Steven评论解决:

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);
}

相关:可能是解决方案:如果这没有帮助,请发布完整的异常详细信息(堆栈跟踪、消息、异常类型和所有内部异常)。@Steven我在线程中对您的建议做了一些修改,因为接口方法签名已更改。这是一种有效的方法吗?是的,似乎是合法的。这也是为我做的