- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Unity 和 Entity Framework 开发 WPF Prism 应用程序。我希望在构建 ViewModel 时注入(inject)我的自定义 DbContext,这样我就可以在 ViewModel 的整个生命周期中使用它。 DbContext 类所在的模块在 Bootstrapper 中注册,DbContext 类型在 Module.Initialize() 期间注册。
综上所述,在尝试构造注入(inject) DbContext 的 ViewModel 时会抛出运行时错误。它说 IDbConnection 需要注册。当我向模块注册它时,它会说 DbConnection 是一个抽象类,无法构造。关于应该如何注册 DbContext,肯定有一些我不知道的事情。
这是在模块中注册类型的位置:
public class SharedResourcesModule : IModule
{
IUnityContainer container;
public SharedResourcesModule(IUnityContainer container)
{
this.container = container;
}
public void Initialize()
{
container.RegisterType<IAuthenticationService, AuthenticationService>();
container.RegisterType<IDataBaseContext, EFDbContext>();
}
}
还有一个 ViewModel 构造函数的例子:
public class ProductContextResultViewModel : ViewModelBase
{
public ProductContextResultViewModel(IDataBaseContext dataBaseContext)
{
this.DataBaseContext = dataBaseContext as EFDbContext;
}
private EFDbContext DataBaseContext { get; set; }
}
如果我可以提供任何其他详细信息,请告诉我!
异常详情如下:
Microsoft.Practices.ServiceLocation.ActivationException 未被用户代码处理 HResult=-2146233088 消息=尝试获取对象类型的实例时出现激活错误,键为“ProductContextResultView” 源=Microsoft.Practices.ServiceLocation 堆栈跟踪: 在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(类型 serviceType,字符串键)在 c:\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 53 在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService](字符串键)在 c:\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 103 在 Microsoft.Practices.Prism.Regions.RegionNavigationContentLoader.CreateNewRegionItem(字符串 candidateTargetContract) 内部异常:Microsoft.Practices.Unity.ResolutionFailedException HResult=-2146233088 Message=解析依赖失败,类型=“System.Object”,名称=“ProductContextResultView”。异常发生在:解析时。
发生异常时,容器是:
正在解析 ContextResultsPane.ProductContextResult.ProductContextResultView、ProductContextResultView(从 System.Object、ProductContextResultView 映射) 解析构造函数 ContextResultsPane.ProductContextResult.ProductContextResultView(ContextResultsPane.ProductContextResult.ProductContextResultViewModel viewModel) 的参数“viewModel” 解析 ContextResultsPane.ProductContextResult.ProductContextResultViewModel,(无) 解析构造函数 ContextResultsPane.ProductContextResult.ProductContextResultViewModel(SharedResources.DataAccess.IDataBaseContext dataBaseContext) 的参数“dataBaseContext” 解析 SharedResources.DataAccess.EFDbContext,(无)(从 SharedResources.DataAccess.IDataBaseContext 映射,(无)) 解析构造函数 SharedResources.DataAccess.EFDbContext(System.Data.Common.DbConnection connection) 的参数“连接” 解析 System.Data.Common.DbConnection,(无)
Source=Microsoft.Practices.Unity
NameRequested=ProductContextResultView
TypeRequested=Object
StackTrace:
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
at Microsoft.Practices.Prism.UnityExtensions.UnityServiceLocatorAdapter.DoGetInstance(Type serviceType, String key)
at Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 49
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=The current type, System.Data.Common.DbConnection, is an abstract class and cannot be constructed. Are you missing a type mapping?
Source=Microsoft.Practices.Unity
StackTrace:
at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructAbstractClass(IBuilderContext context)
at lambda_method(Closure , IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
at lambda_method(Closure , IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
at lambda_method(Closure , IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
at lambda_method(Closure , IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
InnerException:
最佳答案
Glen Thomas 的指导帮助我进行了更多阅读,结果证明 Unity 默认使用最冗长的构造函数。这是问题的核心,因为我有一个构造函数需要传递 DbConnection 以进行单元测试。
为了强制 Unity 使用默认构造函数,我更改了这个...
container.RegisterType<IDataBaseContext, EFDbContext>();
...为此...
container.RegisterType<IDataBaseContext, EFDbContext>(new InjectionConstructor());
更改后它按预期工作!
关于c# - 如何将 DbContext 实现注入(inject) Prism ViewModel 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832618/
我想将使用 Prism 4 编写的项目迁移到 Prism 6。 在 Prism 4 中 CompositePresentationEvent类型位于Microsoft.Practices.Compos
Pattern of pub-sub events is that the publisher should not know or care if there are any subscribers
我刚刚使用 MVVMLight、PRISM 和 DryIoc 启动了我的第一个 WPF 应用程序。 App.xaml 引用 prism:PrismApplication,如 https://prism
Microsoft 的 Patterns and Practices 提供的示例非常有用: 大约六个更简单的快速入门 其中涉及具体问题 股票交易者引用实现 ,这是一个相当全面的应用程序 但它缺乏更有用
prism 中共享服务的目的和用途是什么? 哪些事情会让我认为我必须使用共享服务而不是 Event Aggregator? 最佳答案 从事件订阅者的角度来看 EventAggregator,它有利于获
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 Improve this qu
寻找一个简单的 helloWorld EventAggregator 示例。我试图理解这一点,并且在遵循 RI 示例时遇到了一些困难。 谢谢 N 最佳答案 Prism 4.0 包括 EventAggr
我只是想知道区域的意义是什么。我想我不明白他们解决的问题。 例如,我看到很多人使用区域作为导航区域,但是为什么不将 ItemsControl 绑定(bind)到 ObservableCollectio
最近想将我的 WPF Prism 应用程序迁移到 7.1,这样做时我遇到了有关 Unity.Abstractions 的丢失引用错误。 将 Prism nuget 软件包升级到 Prism7.1,如下
在我的根 View 模型中,我称之为 await _navigationService.NavigateAsync( "/NavigationPage/Page1of2", useMo
在 2.1.x 时间框架中讨论了与 Prism 的集成,我们是 @2.4.x,Prism 4 现已推出,/contrib 中的 RIStockTrader 示例只是一个默认的 XAML 项目。 它应该
我正在使用 Prism4,并且在我的一个模块中,我试图用一个区域注册一个 View ,并处理它的按钮单击事件(当用户单击 View 上的按钮时发布)。 public class MyModule :
几个月来,我一直在将 Prism 2.0 用于个人项目。我最近听说过 Caliburn,我想知道是否有令人信服的理由让我考虑这样做。 我喜欢 Prism 的动态模块加载能力。我打算为我的应用程序构建模
我正在尝试对我的 Windows 应用商店应用程序中的暂停事件使用react。我添加了适当的回调方法,但遇到了问题: App.Current.Suspending += Current_Suspend
我目前正在尝试完成 this tutorial让 Prism 与 Spring.net 一起工作。 通过 NuGet(或手动引用程序集)引用 Prism4 和 Spring.Net 后,设置 Boot
几个月来,我一直在使用带有以下 XAML 命名空间声明的 Prism 6: xmlns:prism="http://www.codeplex.com/prism" 但我注意到这个命名空间 URL(重定
我在 PRISM 中实现应用程序,它需要从 dll 文件中动态导入模块。我设法做到了 - 他们正在导入,但我无法显示它。我决定创建一个特殊的模块来封装它——让我们称之为 ModuleDock。所以我们
我要创建的是一个 Silverlight 应用程序,其中包含几个选项卡/模块,这些选项卡/模块都是单独的 DLL。 我看到 PRISM 具有似乎针对 UI 的 Shell/Module 概念,并且我找
请帮忙 - 我迷路了! 我正在编写一个具有一些控件和一些屏幕的小型桌面应用程序。这应该稍后与一个小型网站集成,也有一些屏幕。这个想法是让用户编辑视频并选择图像,然后与她的 friend 分享他们的结果
我在使用方法时遇到问题 this.regionManager.RegisterViewWithRegion("TextRegion", typeof(TextView)); 如果我以某种方法在 Boo
我是一名优秀的程序员,十分优秀!