.net 使用StructureMap和NET MVC 2时出现TryGetInstance问题

.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(),因为如果模型类型不匹配,前者将返回

我正在使用StructurMap(刚刚升级到2.6.1)和NetMVC2应用程序。我也是这样,您可以使用智能模型绑定器将DI注入到您的viewModels中,以用于需要重新填充选择列表的回发场景

我对
StructureMap
知之甚少,我遇到的问题之一是使用无参数构造函数绑定viewModel时出现
StructureMap 202无实例定义错误

因此,在我的
IOCMOdelBinder类中
我尝试使用
TryGetInstance()
而不是
GetInstance()
,因为如果模型类型不匹配,前者将返回null。基本上,如果找不到已注册的实例,则返回默认的模型绑定器

我的override
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将只返回已注册的类型,而GetInstance将尽可能构造未注册的具体类型。请参阅Jeremy Miller的帖子:

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


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

在较新版本中,TryGetInstance被忽略,不再存在