Entity framework 4 使用DI工具unity创建EF ObjectContext对象

Entity framework 4 使用DI工具unity创建EF ObjectContext对象,entity-framework-4,unity-container,objectcontext,Entity Framework 4,Unity Container,Objectcontext,我尝试使用下面的脚本在容器中注册类型,效果很好 Container.RegisterType<System.Data.Objects.ObjectContext, ExSS.Repository.MyEntity>( "myentity", new InjectionConstructor()); 说明: An unhandled exception occurred during the execution of the current web re

我尝试使用下面的脚本在容器中注册类型,效果很好

 Container.RegisterType<System.Data.Objects.ObjectContext,
              ExSS.Repository.MyEntity>( "myentity", new InjectionConstructor());
说明:

An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error 
and where it originated in the code. 
例外情况详情:

System.InvalidOperationException: The type name or alias ObjectContext could 
not be resolved. Please check your configuration file and verify this type name.
堆栈跟踪是:

[InvalidOperationException: The type name or alias ObjectContext could not be resolved. Please check your configuration file and verify this type name.]
   Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(String typeNameOrAlias, Boolean throwIfResolveFails) +200
   Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolver.ResolveType(String typeNameOrAlias) +59
   Microsoft.Practices.Unity.Configuration.RegisterElement.GetRegisteringType() +70
   Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer container) +111
   Microsoft.Practices.Unity.Configuration.ContainerConfiguringElement.ConfigureContainerInternal(IUnityContainer container) +39
   Microsoft.Practices.Unity.Configuration.<>c__DisplayClass1.<ConfigureContainer>b__0(ContainerConfiguringElement element) +42
   Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach(IEnumerable`1 sequence, Action`1 action) +200
   Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer container) +269
   Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer container, String configuredContainerName) +133
   Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container, UnityConfigurationSection section, String containerName) +70
[InvalidOperationException:无法解析类型名或别名ObjectContext。请检查配置文件并验证此类型名。]
Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(字符串typeNameOrAlias,布尔throwIfResolveFails)+200
Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolver.ResolveType(字符串typeNameOrAlias)+59
Microsoft.Practices.Unity.Configuration.RegisterElement.GetRegisteringType()+70
Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer容器)+111
Microsoft.Practices.Unity.Configuration.ContainerConfiguringElement.ConfigureContainerInternal(IUnityContainer容器)+39
Microsoft.Practices.Unity.Configuration.c___显示类1.b___0(ContainerConfigurangElement)+42
Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach(IEnumerable`1序列,Action`1 Action)+200
Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer容器)+269
Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer容器,字符串configuredContainerName)+133
Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer容器,UnityConfiguration节,字符串容器名称)+70

谁能给点建议吗?非常感谢

您的配置错误。应该是:

<alias alias="ObjectContext" type="System.Data.Objects.ObjectContext, System.Data.Entity" />
<alias alias="MyEntity" type="ExSS.Repository.MyEntity, ExSS.Repository"/>
<register type="ObjectContext" mapTo="MyEntity" name="myentity">
    <constructor />
</register>

找到原因,它与CLR无法正确加载程序集System.Data.Entity有关。应添加publicktokenkey和文化及版本。以下配置工作:

<alias alias="ObjectContext" type="System.Data.Objects.ObjectContext, System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
<alias alias="MyEntity" type="ExSS.Repository.MyEntity, ExSS.Repository"/> 
<register type="ObjectContext" mapTo="MyEntity" name="myentity"> 
  <constructor /> 
</register>


谢谢您的回复。我如上所述修改了配置,得到了与之前相同的错误消息。似乎无法从xml注册对象,我首先在代码中注册它:_container.RegisterType(“myentity”,new InjectionConstructor());在xml中配置其他类,其中一些类具有依赖于System.Data.Objects.ObjectContext的字段,在xml中是这样的:但遗憾的是,我收到了相同的错误消息。容器ExsUnityCfg似乎无法解析代码中定义的ObjectContext
<alias alias="ObjectContext" type="System.Data.Objects.ObjectContext, System.Data.Entity" />
<alias alias="MyEntity" type="ExSS.Repository.MyEntity, ExSS.Repository"/>
<register type="ObjectContext" mapTo="MyEntity" name="myentity">
    <constructor />
</register>
<alias alias="ObjectContext" type="System.Data.Objects.ObjectContext, System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
<alias alias="MyEntity" type="ExSS.Repository.MyEntity, ExSS.Repository"/> 
<register type="ObjectContext" mapTo="MyEntity" name="myentity"> 
  <constructor /> 
</register>