C# 如何配置Unity以在两个构造函数中共享一个实例?

C# 如何配置Unity以在两个构造函数中共享一个实例?,c#,.net,dependency-injection,unity-container,C#,.net,Dependency Injection,Unity Container,假设我有以下类/构造函数: public class Model {} // Parameterless constructor here public class Controller { public Controller(Model model) {} } public class ViewModel { public ViewModel(Model model) {} } 我希望有一个工厂,使用控制器和viewmodel上的相同模型实例创建一个模型、一个控制器和一个viewmodel

假设我有以下类/构造函数:

public class Model {} // Parameterless constructor here
public class Controller { public Controller(Model model) {} }
public class ViewModel { public ViewModel(Model model) {} }
我希望有一个工厂,使用控制器和viewmodel上的相同模型实例创建一个模型、一个控制器和一个viewmodel

如何配置Unity在工厂中使用它,以便在两个构造函数中使用相同的实例

编辑:


每次要创建ViewModel时,我都要创建控制器和模型。因此1VM=1C=1M,模型在VM和C之间共享。

不清楚视图模型和控件之间的关系,因此很难看出解析一个模型将如何解析另一个。您可以尝试使用带有两个
out
参数和注入构造函数的工厂

// However you decide to setup your factory method
public static void CreateViewModelAndController(
    out ViewModel viewModel, 
    out Controller controller, 
    IUnityContainer unityContainer)
{
    Model model = unityContainer.Resolve<Model>();
    viewModel = unityContainer.Resolve<ViewModel>(new InjectionConstructor(model));
    controller = unityContainer.Resolve<Controller>(new InjectionConstructor(model));
}
//但是您决定设置工厂方法
公共静态void CreateViewModelAndController(
out ViewModel ViewModel,
输出控制器,
IUnityContainer unityContainer)
{
Model Model=unityContainer.Resolve();
viewModel=unityContainer.Resolve(新注入构造函数(模型));
controller=unityContainer.Resolve(新注入构造函数(模型));
}

如果您确实需要“一个型号”,您可以向
ContainerControlled LifetimeManager
lifetime(singleton)。。。但这可能不是你想要的。如果有超过一个<代码>控制器<代码> >代码> VisualMask[/Couth]对在应用程序的生命周期上创建(我假设它是类似于WPF,而不是ASP.NETMVC)的话,请考虑添加关于这些对象是如何相互关联的信息。ContainerControlledLifetimeManager这次无法工作。控制器、模型和视图模型之间的关系如何?换句话说,工厂如何知道为控制器创建哪个模型和视图模型?答案是InjectionConstructor。谢谢