我正在使用来自 ServiceStackv3 的 FunQ。我需要从 Container 解析ViewModel
不同的对象 ID。
基本上构造函数参数应该区分实例(我知道它不能那样工作,它是示例):
var vm1 = EndpointHost.Container.Resolve<ViewModel, int>(1);
var vm2 = EndpointHost.Container.Resolve<ViewModel, int>(2);
随后:
var vm3 = EndpointHost.Container.Resolve<ViewModel, int>(1);
Assert.Equal(vm1 == vm3)
我试过ReusedWithin
没有成功。
我需要两个实例同时用于表示层,用户需要比较屏幕上的两个对象。
是命名实例唯一选项吗?我是独立的应用程序,带有自托管的 ServiceStack 主机。
这是我的控制台应用程序:
public class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Start");
var appHost = new AppHost();
var vm1 = EndpointHost.Container.Resolve<ViewModel, int>(1);
Console.WriteLine("Id1=" + vm1.SomeSomeId + " Instances=" + ViewModel.Instances);
var vm2 = EndpointHost.Container.Resolve<ViewModel, int>(2);
Console.WriteLine("Id2=" + vm2.SomeSomeId + " Instances=" + ViewModel.Instances);
var vm3 = EndpointHost.Container.Resolve<ViewModel, int>(1);
Console.WriteLine("Id3=" + vm3.SomeSomeId + " Instances=" + ViewModel.Instances);
Console.WriteLine("Stop");
Console.ReadKey();
}
}
public class AppHost : AppHostHttpListenerBase
{
public AppHost()
: base("Test Service", typeof(Program).Assembly)
{
Init();
Start("http://*:8082/");
}
public override void Configure(Container container)
{
container.Register<ViewModel, int>((c, i) => new ViewModel(i));
}
}
public class ViewModel
{
public static int Instances = 0;
public int SomeSomeId { get; set; }
public ViewModel(int someId)
{
SomeSomeId = someId;
Interlocked.Increment(ref Instances);
}
}
编辑
申请结果:
ReusedWithin(ReuseScope.Default, Container, Request)
Id1=1 Instances=1 Id2=1 Instances=1 Id3=1 Instances=1
ReusedWithin(ReuseScope.None)
Id1=1 Instances=1 Id2=2 Instances=2 Id3=1 Instances=3