私はいくつかの奇妙なコードの問題を経験してきましたが、最終的にシングルトンとして機能するはずのものが実際にはシングルトンではないことに気付いたようです。これはキャッシュ クラスであるため、同じキャッシュの複数のバージョンを持つことになります。以下のようにいくつかのテストコードを書きましたが、私の目にはこれでうまくいくはずです。私は何か間違ったことをしていますか、それともバグに遭遇しましたか?
public class GenericClassesNotRegisteredAsSingletonTest
{
public interface ICacheManager<T> { }
public class SettingsData { }
public class SettingsCache : CacheManager<SettingsData> { }
public class CacheManager<T> : ICacheManager<T> { }
[Test]
public void Test()
{
var container = new Container();
var registration = Lifestyle.Singleton
.CreateRegistration(typeof(SettingsCache),
typeof(SettingsCache), container);
container.AddRegistration(
typeof(ICacheManager<SettingsData>), registration);
container.Verify();
var cache1 = container.GetInstance<SettingsCache>();
var cache2 = container.GetInstance<SettingsCache>();
bool sameRef = cache1 == cache2;
Assert.That(sameRef == true);
}
}