2011-07-26 11 views
3

私のクラスの1つに、ユニットテストに使用される内部コンストラクタと、アプリケーションが呼び出すプライベートコンストラクタがあります。プライベートコンストラクタにはパラメータがなく、セッター注入を使用するためにBuildUpが呼び出されますが、internalには依存関係のパラメータがあります。コードは次のエラーで私にクラッシュしたよう-です:StructureMapを使用してプライベートコンストラクタまたは内部コンストラクタからBuildUpを呼び出せません

StructureMap Exception Code: 245 
Error while trying to create an InstanceBuilder for My.Namespace.And.Class, My.Assembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null 
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type t) in c:\code\structuremap\Source\StructureMap\Graph\PluginCache.cs:line 40 
at StructureMap.Util.Cache`2.get_Item(KEY key) in c:\code\structuremap\Source\StructureMap\Util\Cache.cs:line 82 
at StructureMap.Graph.PluginCache.FindBuilder(Type pluggedType) in c:\code\structuremap\Source\StructureMap\Graph\PluginCache.cs:line 52 
at StructureMap.Container.BuildUp(Object target) in c:\code\structuremap\Source\StructureMap\Container.cs:line 243 
at StructureMap.ObjectFactory.BuildUp(Object target) in c:\code\structuremap\Source\StructureMap\ObjectFactory.cs:line 297 

Object reference not set to an instance of an object. 
at StructureMap.Construction.ConstructorFunctionBuilder`1.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\ConstructorFunctionBuilder.cs:line 25 
at StructureMap.Construction.BuilderCompiler.FuncCompiler`1.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\BuilderCompiler.cs:line 51 
at StructureMap.Construction.BuilderCompiler.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\BuilderCompiler.cs:line 12 
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type t) in c:\code\structuremap\Source\StructureMap\Graph\PluginCache.cs:line 36 

を、それが公共の代わりに、民間、あるいは内部ですので、私はデフォルトのコンストラクタを変更する場合は、予想通り、その後、すべてが動作します。これはプライベートと内部のコンストラクタで意図された動作ですか、これはバグですか?

答えて

6

はい、you need a public constructorインスタンスを自動構成するための構造マップです。

IMHOコンテナ(BuildUp)を明示的に呼び出している場合、DIにカップリングを追加しています(カップリングを削除するためにDIの目的の一部を破っています)。私は多くの場合、stick to simple constructor injectionを好んでいます。何らかの理由で依存関係を明示的に入力する必要がある場合は、コンテナに具体クラス(ObjectFactory.GetInstance<Class>())を呼び出すだけで、最も複雑なパブリックコンストラクタの依存関係を自動入力します。

関連する問題