我创建了一个项目,它使用EF 6.1,DevArt Oracle Connector,Unit来托管WCF服务。我能够运行这个项目并且Ny * .svc URL也正常运行。现在我试图在我的Prism 4.1 Silverlight项目中使用此服务这也是与这个wcf项目进行通信。
但是当我尝试在我的App的1个模块中获取数据时,我收到了这个错误:
请指导我哪里出错?
错误
Microsoft.Practices.Unity.ResolutionFailedException was unhandled by user code
HResult=-2146233088
Message=Resolution of the dependency failed, type = "Abs.Web.DomainServices.UserWcfService", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]], is an interface and cannot be constructed. Are you missing a type mapping?
-----------------------------------------------
At the time of the exception, the container was:
Resolving Abs.Web.DomainServices.UserWcfService,(none)
Resolving parameter "Uw" of constructor Abs.Web.DomainServices.UserWcfService(Abs.Data.Contracts.IAbsDataRepoositoryWorkUnit Uw)
Resolving Abs.Data.AbsDataRepoositoryWorkUnit,(none) (mapped from Abs.Data.Contracts.IAbsDataRepoositoryWorkUnit, (none))
Resolving parameter "repositoryProvider" of constructor Abs.Data.AbsDataRepoositoryWorkUnit(Abs.Data.Helpers.IRepositoryProvider repositoryProvider)
Resolving Abs.Data.Helpers.RepositoryProvider,(none) (mapped from Abs.Data.Helpers.IRepositoryProvider, (none))
Resolving parameter "repositoryFactories" of constructor Abs.Data.Helpers.RepositoryProvider(Abs.Data.Helpers.RepositoryFactories repositoryFactories)
Resolving Abs.Data.Helpers.RepositoryFactories,(none)
Resolving parameter "factories" of constructor Abs.Data.Helpers.RepositoryFactories(System.Collections.Generic.IDictionary`2[[System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Func`2[[System.Data.Entity.DbContext, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] factories)
Resolving System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]],(none)
Source=Microsoft.Practices.Unity
TypeRequested=UserWcfService
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.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
at Abs.Web.Ioc.UnityInstanceProvider.GetInstance(InstanceContext instanceContext, Message message) in d:\ProjectAbsWork\Abs.Web\Ioc\UnityInstanceProvider.cs:line 29
at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=The current type, System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]], is an interface and cannot be constructed. Are you missing a type mapping?
Source=Microsoft.Practices.Unity
StackTrace:
at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(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.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:
这是我从UnityInstanceProvide:IInstanceProvider Class复制的 接着这样:http://jamesheppinstall.wordpress.com/2012/06/20/windows-communication-foundation-resolving-wcf-service-dependencies-with-unity/
public object GetInstance(InstanceContext instanceContext, Message message)
{
return Container.Resolve(ServiceType);
}
当我的Prism模块尝试从WCF托管项目加载数据时。
在Prism UI项目中我得到了
System.TimeoutException was unhandled by user code
Message=The HTTP request to 'http://localhost:62269/DomainServices/UserWcfService.svc' has exceeded the allotted timeout. The time allotted to this operation may have been a portion of a longer timeout.
StackTrace:
at System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args)
at proxy_2.EndgetAllUser(IAsyncResult )
at Abs.Tabtest.ViewModel.TabViewModel._AlUserCallBack(IAsyncResult ar)
at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)
InnerException: System.Net.WebException
Message=""
StackTrace:
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
InnerException: System.Net.WebException
Message=""
StackTrace:
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
InnerException:
我的模块代码如下:用于在模块中注册服务。
this.container.RegisterType<UserWcfService>(
new ContainerControlledLifetimeManager(),
new InjectionFactory(
(c) => new ChannelFactory<UserWcfService>("CustomBinding_UserWcfService").CreateChannel()));
在ViewModel中使用:
IEventAggregator _eventAggregator;
UserWcfService _Userservice;
public TabViewModel(ITabView view, IEventAggregator eventAggregator , UserWcfService service)
: base(view)
{
_eventAggregator = eventAggregator;
_Userservice = service;
// var evt = _eventAggregator.GetEvent<UserUpdatedEvent>();
// if(evt!=null )evt.Subscribe(UserUpdatedJob);
ButtonLabelText = "Holy Cow !!";
_Userservice.BegingetAllUser(_AlUserCallBack, null);
}
public object asyncState { get; set; }
private void _AlUserCallBack(IAsyncResult ar)
{
var a=_Userservice.EndgetAllUser(ar);
_UserDetailsDataGridContext = a;
}
不知道我哪里出错了。
答案 0 :(得分:0)
这是为你搞砸的类型:Abs.Data.Helpers.RepositoryFactories
。它的构造函数参数为IDictionary<Type,Func<DbContext,Object>>
。您需要将此接口映射到实现,以便Unity解析依赖关系图。