.net 使用StructureMap和NET MVC 2时出现TryGetInstance问题
我正在使用StructurMap(刚刚升级到2.6.1)和NetMVC2应用程序。我也是这样,您可以使用智能模型绑定器将DI注入到您的viewModels中,以用于需要重新填充选择列表的回发场景 我对.net 使用StructureMap和NET MVC 2时出现TryGetInstance问题,.net,asp.net-mvc,inversion-of-control,structuremap,.net,Asp.net Mvc,Inversion Of Control,Structuremap,我正在使用StructurMap(刚刚升级到2.6.1)和NetMVC2应用程序。我也是这样,您可以使用智能模型绑定器将DI注入到您的viewModels中,以用于需要重新填充选择列表的回发场景 我对StructureMap知之甚少,我遇到的问题之一是使用无参数构造函数绑定viewModel时出现StructureMap 202无实例定义错误 因此,在我的IOCMOdelBinder类中我尝试使用TryGetInstance()而不是GetInstance(),因为如果模型类型不匹配,前者将返回
StructureMap
知之甚少,我遇到的问题之一是使用无参数构造函数绑定viewModel时出现StructureMap 202无实例定义错误
因此,在我的IOCMOdelBinder类中
我尝试使用TryGetInstance()
而不是GetInstance()
,因为如果模型类型不匹配,前者将返回null。基本上,如果找不到已注册的实例,则返回默认的模型绑定器
我的overrideCreateModel
类如下所示:
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将只返回已注册的类型,而GetInstance将尽可能构造未注册的具体类型。请参阅Jeremy Miller的帖子:TryGetInstance的意思是“如果容器知道类型,请返回它,否则返回null”。它并不意味着“从容器中请求类型,如果它因任何原因爆炸,则返回null”
最让人困惑的是StructureMap能够解析具体类型,而无需先注册它们。这是一个非常好的特性,因为如果您只想StructureMap解决它们的依赖关系,就不必注册所有的具体类型。但是,由于您不必预先注册具体类型,因此容器不“了解它们”,因为没有任何针对它们的配置。因此,当TryGetInstance检查是否知道具体类型时,它决定不知道,并返回null。但是,如果您只是简单地执行GetInstance,它甚至不会检查是否知道类型,它会将其识别为一个具体的类型,然后构建它。在较新版本中,TryGetInstance被忽略,不再存在