2011-02-10 49 views
0

我是新来的StuctureMap,我在写一个WCF服务。在现有的代码中,以前的开发者使用了SturctureMap。StructureMap例外代码:202没有为PluginFamily定义的默认实例

我得到这个错误:

StructureMap Exception Code: 202
No Default Instance defined for 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

我的猜测是,您没有将配置文件中的相关内容复制到您的wcf项目中......但是我在StructureMap – rene 2011-02-10 23:07:46

+0

上的速度很快,谢谢!我缺少一些值在WEB配置....你救了我的命。它整天烦扰我... – CodeNinja 2011-02-10 23:17:19

回答

2

正如你已经发现,从Web应用程序直接迁移到WCF服务的问题是在哪里放置启动代码。

我只是想指出,您应该远离服务位置行为,并引入依赖注入来代替松散耦合,并使您的服务更易于维护/更改。

Jimmy Bogard写了一篇关于如何使用Structure Map来引导WCF服务的优秀blog entry。他使用自定义的ServiceHostFactory而不是静态构造函数来引导注册表。

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. } 
} 
相关问题