我是StuctureMap的新手,我正在编写WCF服务。在现有代码中,以前的开发人员使用了SturctureMap。
我收到此错误:
StructureMap异常代码:202
没有为PluginFamily定义的默认实例MyCompany.SMS.Data.DataEntitys,MyCompany.SMS.Data,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
以下是代码:
class a
{ method aa
{
var db = ObjectFactory.GetInstance<nsclaimsEntities>();
}
}
当我们从aspx.cs文件调用此代码时,它运行正常,没有任何错误,但我尝试将此代码包装在WCF Web服务中,并且它抛出此异常。
这是堆栈跟踪:
at StructureMap.BuildSession.<.ctor>b__0(Type t)
at StructureMap.Util.Cache`2.get_Item(KEY key)
at StructureMap.BuildSession.CreateInstance(Type pluginType)
at StructureMap.Container.GetInstance(Type pluginType)
at StructureMap.Container.GetInstance[T]()
at StructureMap.ObjectFactory.GetInstance[PLUGINTYPE]()
at NicorNational.SMS.CustDemographic.GetByAccountNumber(String acctNum) in C:\\Projects\\NicorNational.SMS\\CustDemographic.cs:line 105
at NicorNational.Services.eCommerce.EligibilityService.GetEligibilityById(String accountId) in C:\\Projects\\Solutions\\NicorNational.Services.eCommerce\\EligibiltyService.svc.cs:line 23
at SyncInvokeGetEligibilityById(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)"
为什么我会收到此异常?
答案 0 :(得分:2)
正如您已经发现的那样,直接从Web应用程序迁移到WCF服务的问题是放置引导代码的位置。
我只是想指出你应该放弃服务定位行为并引入依赖注入,而不是松耦合,让你的服务更容易维护/改变。
Jimmy Bogard撰写了一篇关于如何使用Structure Map引导WCF服务的优秀blog entry。他使用自定义ServiceHostFactory而不是静态构造函数来引导注册表。
答案 1 :(得分:0)
我通过向WCF服务类添加静态构造函数来解决此问题。找到这个链接。 stack overflow previous link
public Service : IContract
{
public Service(){ // regular constructor }
static Service("Write your Configuration logic here"){ // Only called first time it's used. }
}