2017-01-10 11 views
0

私は構造マップコードで.singleton()を使用する必要があるかどうかを理解しようとしています。 stackoverflow(StructureMap singleton)でこれについての質問は既にありますが、私は間違いなく正しい構文を使用していることを確認したいと思います。Structuremapシングルトンの使用

  x.For<IApprovedProgrammesHelper>().Use<ApprovedProgrammesHelper>(); 
      x.For(typeof(ICache<>)) 
       .Use(typeof(CacheHelper<>)) 
       .Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration); 

は次のようになります:

  x.For<IApprovedProgrammesHelper>().singleton().Use<ApprovedProgrammesHelper>(); 
      x.For(typeof(ICache<>)) 
       .Singleton() 
       .Use(typeof(CacheHelper<>)) 
       .Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration); 

これが正しいのである答えの一つは、私は型を返すいた場合、私はここに私のコードはなるように().singleton使用する必要があることを意味しますか?または、これがどのように機能すべきか誤解しましたか?どちらの意味がコードのものなのかは完全にはわかりません。いずれにしても、.Use <>ステートメントの型がシングルトンパターンに従わないことには言及する価値があります。事前 サム

+0

あなただけがそれを持ってしても安全であるか否かを知る*一つだけ'CacheHelper 'と 'ApprovedProgrammesHelper'のインスタンス*を返します。それ(またはその依存関係)が(変更可能な)状態を持ち、スレッドセーフでない場合は、それらをシングルトンとして定義することはおそらく賢明ではありません。誰でもこの質問に答えられる方法はありません。両方のクラスのコード、依存関係、およびこのコードが実行されているコンテキスト(フレームワークなど)を知ることなしには誰も答えられません。 – Steven

+0

@スティーブンあなたが正しいと思ったら、関連するクラス/インターフェイスの詳細を知っていれば、シングルトンが適切かどうかを唯一言うことが唯一可能であることを理解するのに少し時間がかかりました。あなたの説明は、私の問題を解明するのに役立ちました - シングルトンを使用することは間違っていたり間違っていたりしています。ご協力いただきありがとうございます。 –

答えて

0

シングルトンAPIのご利用でお時間を

おかげで、しかし、あなたのコードが、それはあなたがそれシングルトン作るべきであるかどうかを言うのは難しいです何をしているかを知らなくても、正しいです。

Singleton()メソッド呼び出しを追加すると、構造マップにICache<>という1つのインスタンスが作成され、1つのインスタンスに解決されるオブジェクトに対する他の要求が作成されます。例えば

、シングルトンとして次のクラスをマーキングすることは、常にその最初の呼び出しで同じで日付と時刻に解決します:

public class SingletonExample 
{ 

    private readonly DateTime _time; 

    public SingletonExample(){ 
     _time = DateTime.Now; 
    } 

    public DateTime GetDateTime() 
    { 
     return _time; 
    } 
} 
+0

あなたの答えをありがとう、私はシングルトンの使用についての決定を下す前に、問題のクラスで詳しく調べる必要があると思います。あなたの例は、なぜシングルトンを使用するのが賢明でないのかを理解する助けになりました。 –

関連する問題