2

重複の可能性:
静的/グローバル変数を使用せずにシングルトンを実装する方法は? 可能?

ほとんどの人が Singleton を悪だと言う理由の 1 つは、Singleton がグローバルなアクセス ポイントを提供するか、グローバル変数のようになることです。静的を含むグローバル変数を一切持たずにシングルトンを実装することは可能ですか? C#.NET でこれを行うことは可能ですか?

4

4 に答える 4

3

あなたがほのめかしている問題は、シングルトンがグローバル変数のようになることです。それが何を使用するかは無関係です。

答えはノーです。常にどこかで static が必要になります。それを延期することしかできません。そして、そのようなことはポイントを打ち負かします。

于 2012-11-01T14:18:43.713 に答える
2

いいえ、それはシングルトンではありません。

IoC コンテナを使用して、シングルトンとしてのみ注入できます。

于 2012-11-01T14:18:09.597 に答える
2

インターフェイスを実装してから、StructureMap などを使用できます。SM では、次のようにクラスを作成します。

public class Foo : IFoo
{
}

次に、コンテナーで次のように定義します。

ObjectFactory.Initialize(x =>
{
    x.For<IFoo>.Singleton().Use<Foo>();
}

次に、このリソースを必要な場所に注入します。

public class Bar
{
    public Bar(IFoo foo)
    {
    }
}

したがって、作成された具象のインスタンスは 1 つだけになり、それを必要とする列挙可能な数の型に注入されます。

于 2012-11-01T14:18:42.517 に答える
0

私はそうは思わない。静的変数がない場合、インスタンスをどこに保存しますか?通常、クラスのシングルトンが必要な場合は、すべてのコンストラクターをプライベートにし、インスタンスがまだ作成されていない場合にインスタンスを作成する静的メソッドまたはプロパティを提供して、インスタンスを返します。インスタンス自体はプライベート変数として格納されるため、インスタンスにアクセスする唯一の方法は、提供されたメソッド/プロパティ(またはリフレクション)を使用することです。

于 2012-11-01T14:19:56.333 に答える