gpt4 book ai didi

c# - 防止简单注入(inject)器与 Umbraco Controller 发生冲突

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:06 26 4
gpt4 key购买 nike

尽管在我的 Umbraco 解决方案中只注册了我自己的 mvc Controller ,简单的注入(inject)器似乎也影响了 Umbraco 的后台 Controller 。如果我运行下面的代码片段,Umbraco 后台 Controller 会出现异常,类似于 this thread 中的问题。 .

我是否还需要添加自定义 Controller 激活器之类的东西?

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

关于c# - 防止简单注入(inject)器与 Umbraco Controller 发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47814413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com