正如linked 教程中所述
2) 默认情况下,每个对象都是单例。要解析对象使其不是单例,您需要将唯一值传递给 GetInstance 调用:
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
所以每次你什么都不传递(或总是相同的值)到GetInstance的调用时得到相同的实例
[Test]
public void CreateNonGeneric_ReturnsSameInstance1()
{
SimpleIoc.Default.Register<Repository>();
var result1 = SimpleIoc.Default.GetInstance<Repository>();
var result2 = SimpleIoc.Default.GetInstance<Repository>();
Assert.That(result1, Is.SameAs(result2));
}
[Test]
public void CreateNonGeneric_ReturnsSameInstance2()
{
SimpleIoc.Default.Register<IRepository, Repository>();
var result1 = SimpleIoc.Default.GetInstance<IRepository>();
var result2 = SimpleIoc.Default.GetInstance<IRepository>();
Assert.That(result1, Is.SameAs(result2));
}
[Test]
public void CreateNonGeneric_ReturnsSameInstance3()
{
SimpleIoc.Default.Register<Repository>();
var result1 = SimpleIoc.Default.GetInstance<Repository>("alwaysthesame");
var result2 = SimpleIoc.Default.GetInstance<Repository>("alwaysthesame");
Assert.That(result1, Is.SameAs(result2));
}
更新
您可以在注册期间配置依赖项。这是一个带字符串的
[Test]
public void RegisterSingletonWithFunc_GetIstance_ReturnsSameInstanceEachTime()
{
SimpleIoc.Default.Register<IRepository, Repository>();
SimpleIoc.Default.Register<Repository>(() =>
new Repository("dependency"), "single");
var result1 = SimpleIoc.Default.GetInstance<IRepository>("single");
var result2 = SimpleIoc.Default.GetInstance<IRepository>("single");
Assert.That(result1, Is.SameAs(result2));
}
这是一个由 SimpleIoc 创建的依赖项
[Test]
public void RegisterSingletonWithDependentClass_GetIstance_ReturnsSame()
{
SimpleIoc.Default.Register<IRepository, Repository>();
SimpleIoc.Default.Register<SomeService>();
SimpleIoc.Default.Register<Repository>(() =>
new Repository(
SimpleIoc.Default.GetInstance<SomeService>())
, "single");
var result1 = SimpleIoc.Default.GetInstance<IRepository>("single");
var result2 = SimpleIoc.Default.GetInstance<IRepository>("single");
Assert.That(result1, Is.SameAs(result2));
}