4

私はTcpConnectionによって実装されたIConnectionインターフェイスを持っています。さらに、2つのクラスはIConnectionをパラメータとして受け取ります。そのために同じインスタンスのTcpConnectionを使用したいと思います。StructureMapで同じインスタンスを挿入

問題は動作していないようです。試したすべての方法で、TcpConnectionが複数回作成されました。

public class InstanceRegistry : Registry 
{ 
    public InstanceRegistry() 
    { 
     var connection = 
      For<IConnection>.Add<TcpConnection>. 
      Named("Connection"); // ...and additional configuration 

     For<IFoo>.Add<Foo>. 
      // Ctor<IConnection>.Is(connection); // Did not work 
      Ctor<IConnection>.Is(i => i.GetInstance<IConnection>("Connection"));     

     For<IBar>.Add<Bar>. 
      // Ctor<IConnection>.Is(connection); // Did not work 
      Ctor<IConnection>.Is(i => i.GetInstance<IConnection>("Connection")); 
    } 
} 

は私もシングルトン(「<の場合>()シングルトン()」)としてのIConnectionを宣言しようとしたが、それはどちらか助けていない:ここでは私が使用しているレジストリサブクラスです。私はStructureMap 2.6.1を使用しています。

アイデア?

答えて

3
For<IConnection>().Singleton().Add<TcpConnection>().Named("Connection"); 
For<IFoo>().Add<Foo>().Ctor<IConnection>().Is(i=>i.GetInstance<IConnection>("Connection")); 
For<IBar>().Add<Bar>().Ctor<IConnection>().Is(i=>i.GetInstance<IConnection>("Connection")); 
を使用している 同様の場合にはやりました

上記のコードを使用すると、FooとBarに同じ接続インスタンスがあります。私はまた、いくつかの名前付き接続で疲れました。フーとバーはまだ彼らが想定している接続を取得します。

+0

最後を参照してください私のポストの、私はすでにシングルトンを使ってみました。他のオブジェクトには他の接続が必要なので、私の場合は "Use <>()"を使用できません。 – kshahar

+0

試した例で私の投稿を編集しました – Bassetassen

+1

ありがとう、私は私のために働く(基本的に同じ、ちょうどHybridHttpOrThreadLocalScopedとシングルトンを置き換える)ソリューションを投稿したいのですが、あなたのソリューションも同様に動作します。 – kshahar

1

私は(私は本当にただのStructureMapの初心者ですので、私はすべてのアドバイスのために楽しみにしています)

For<>().Use(x => SomeFactoryMethod())

For<IInterface>().Use(x => CreateInstance()); 

private IInterface CreateInstance() 
{ 
    // get some dependancy 
    // inject it to both arguments down here 
    return new ConcreteInstance(...); 
} 
+0

申し訳ありませんが、投稿を終了せずに偶発的に投稿しました。 –

+0

このメソッドは、「外部で構築されたオブジェクトを使用する」(http://structuremap.net/structuremap/InstanceExpression.htm#section12)と呼ばれています。しかし、TcpConnectionに依存関係がある場合は、手動で解決する必要があります。 – kshahar

+0

GetInstance <>を手動で解決するには、これらの依存関係のチェーンを自動切断しています。 –

関連する問題