2011-02-10 7 views
0

StuctureMapを初めて使用しています。私はWCFサービスを作成しています。既存のコードでは、以前の開発者がSturctureMapを使用していました。StructureMap Exception Code: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のup2speedからは遠いです – rene

+0

ありがとうございました!あなたは私の人生を救った。一日中私に迷惑をかけていた... – CodeNinja

+0

申し訳ありませんが、私はこのエラーを取り除くことができませんでした。既存のASPXアプリケーションについて述べたように、GLOBAL.ASAXファイルを使用してSturucureMapを構成していました。これらの設定をWCFアプリケーションに追加する方法はありますか? – CodeNinja

答えて

2

既に判明きたように、まっすぐなWebアプリケーションからのWCFサービスへの移行の問題は、ブートストラップコードを配置する場所です。

サービスロケーションの振る舞いから離れ、依存性注入を導入して、疎結合を維持し、サービスの保守や変更を容易にする必要があることを指摘しておきました。

Jimmy Bogardは、Structure Mapを使用してWCFサービスをブートストラップする方法について、優れたblog entryを書いています。彼は静的なコンストラクタの代わりにカスタムServiceHostFactoryを使用してレジストリをブートストラップします。

+0

素晴らしいPHeiberg!その作業、あなたの答えのためにトンをありがとう! – CodeNinja

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. } 
} 
関連する問題