gpt4 book ai didi

.net - 使用 StructureMap 和 NET MVC 2 的 TryGetInstance 问题

转载 作者:行者123 更新时间:2023-12-01 07:21:51 25 4
gpt4 key购买 nike

我正在使用 StructurMap(刚刚升级到 2.6.1)和 Jimmy Bogard's Smart Model Binders在我的 NET MVC 2 应用程序中。我也是adapting a technique by Dominic Pettifer这样您就可以使用智能模型绑定(bind)器将 DI 注入(inject)到您的 View 模型中,以用于需要重新填充选择列表的回发场景!

我对StructureMap知之甚少,而我遇到的问题之一是 structuremap 202 no instance defined error用于带有无参数构造函数的 viewModel 绑定(bind)。

所以在我的IOCMOdelBinder class我正在尝试使用 TryGetInstance()而不是 GetInstance()因为如果与模型类型不匹配,则前者返回 null。基本上,如果它没有找到已注册的实例,则回退到默认模型绑定(bind)器。

我的覆盖 CreateModel类看起来像这样:

protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{

var myInstance = ObjectFactory.TryGetInstance(modelType);

if (myInstance != null)
{
return myInstance;
}
else
{
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}

我拿出线 ObjectFactory.GetInstance(modelType);我希望它们以相同的方式工作,但 TryGetInstance返回 null 和 GetInstance返回正确的对象 OK 所以它肯定在注册表中。我可以使用 GetInstance但必须将其包裹在不太优雅的 try catch 中!!!请问有什么建议吗?

最佳答案

TryGetInstance 的意思是“如果容器知道类型,则返回它,否则返回 null”。这并不意味着“向容器请求类型,如果它因任何原因炸毁,则返回 null”。

最令人困惑的原因是 StructureMap 能够解析具体类型而无需您先注册它们。这是一个非常好的功能,因为如果您只想让 StructureMap 解决它们的依赖关系,则不必注册所有具体类型。但是,由于您不必预先注册具体类型,因此容器不会“知道它们”,因为它们没有任何配置。因此,当 TryGetInstance 检查它是否知 Prop 体类型时,它决定不知道,并返回 null。但是,如果您只是简单地执行 GetInstance,它甚至不会检查它是否知道类型,它会将其识别为具体并构建它。

关于.net - 使用 StructureMap 和 NET MVC 2 的 TryGetInstance 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805259/

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