2011-02-10 83 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. } 
} 
相關問題