2011-01-30 10 views
15

私のテストのためにインスタンスをstructuremapにインジェクトする際に問題があります。構造体はセッターインジェクションのインジェクションインスタンスを使用できません

マイオブジェクトのグラフは、この

internal class ConfigurationManager : IConfigurationManager : IManager 
{ 
    public ISomeManager SomeManager { get; set; } 
} 

internal class SomeManager : ISomeManager : IManager 
{ 
    public IConfigurationManager ConfigurationManager { get; set; } 
} 

1)は、最初のiが見つかったすべてのレジストリをコンテナを作成し、追加これらのスキャンアセンブリの

_container = new Container(c => c.Scan(s => 
{ 
    s.TheCallingAssembly(); 
    s.LookForRegistries(); 
})); 

1には、以下の登録が含まれているように見えます

x.For<IConfigurationManager>().Singleton.Use<ConfigurationManager>(); 

2)、私は、この管理のため

_configurationManagerStub = MockRepository.GenerateStub<IConfigurationManager>(); 
_container.Inject(_configurationManagerStub); 

3を特殊なモックオブジェクトを注入する)そしてマネージャインスタンスが(円形の依存性を回避するように構成されたセッタ注入せずに作成されている)

foreach (Type pluginType in AllManagers()) 
{ 
    managerInstances.Add(_container.GetInstance(pluginType)); 
} 

4)私は最後にBuildUpメソッドを使用して、IManagerタイプのプロパティを設定します。

_container.Configure(x => x.SetAllProperties(c => 
{ 
    // configure the property injection for all managers 
    c.Matching(prop => typeof(IManager).IsAssignableFrom(prop.PropertyType)); 
})); 

// push in dependencies -> EXCEPTION 
managerInstances.ForEach(x => _container.BuildUp(x)); 

不幸なことに、最後のコード行では次の例外が発生します。

StructureMap.StructureMapException:のStructureMap例外コード:245 エラーInstanceBuilder IConfigurationManagerProxyd079980359cf491b821a3afb15be8a86ため、 DynamicProxyGenAssembly2、バージョン= 0.0.0.0、文化=中立、 なPublicKeyToken = nullを---->システムを作成しようとしているとき.ArgumentException: タイプの発現 'のSystem.Object' メソッドのタイプ のパラメータのために使用することができない '可能System.String' 'Castle.Core.Interceptor.IInterceptor [] GetIInterceptor []'

インスタンスを挿入したときにstructuremapがInstanceBuilderを使用しようとするのはなぜですか?

Brで、

デビッド
+0

この問題は解決しましたか?私は同じ例外があります。 – AdamSane

答えて

1

問題が城のDynamicProxyのStructureMapサポートである(Rhinoのモックと部品番号がそれを使用する)の蓄積に使用された場合、スタブを生成しました。

特に、Castleは、要求されたプロキシタイプに対して2つのパラメータを持つコンストラクタを生成し、これらのパラメータには名前がありません。このような場合、StructureMap内のConstructorFunctionBuilderは適切なラムダ式を作成できません(nullは、System.Stringが必要なSystem.Objectとして扱われます)。プロパティセットターを設定したいときには必要ありませんが、これを制御する方法はありません。

"インジェクション"は非動的に生成されたスタブで動作しますが、別の解決方法を探したいかもしれません。

関連する問題