C# 如何在另一个prism模块中等待方法?

C# 如何在另一个prism模块中等待方法?,c#,wpf,unity-container,prism,C#,Wpf,Unity Container,Prism,我一直在玩prism,并决定使用prism+WPf+Unity将应用程序转换为模块化prism应用程序 这个应用程序与不同的硬件进行通信,所以第一件事是将我所有的硬件类放在不同的模块中 以我的摄像头类为例,它通过以太网与摄像头系统进行对话 假设我的相机课在棱镜转换之前是这样的 Public Class Camera { // bunch of properties public Task<bool> TakePhoto() { return

我一直在玩prism,并决定使用prism+WPf+Unity将应用程序转换为模块化prism应用程序

这个应用程序与不同的硬件进行通信,所以第一件事是将我所有的硬件类放在不同的模块中

以我的摄像头类为例,它通过以太网与摄像头系统进行对话

假设我的相机课在棱镜转换之前是这样的

Public Class Camera
{
    // bunch of properties 

    public Task<bool> TakePhoto()
    {
       return Task.Run(()=>
       {
          // ...
          // Do taking photo stuff
          // ...    
          return CameraPhotoTakenResult; // Return result of taking photo 
       });
    }
}

据我所知,我现在必须使用EventAggregator来触发相机,这很好,但这是否意味着我必须使用另一个事件来发回结果?如果是这样的话,我如何修改我的代码来等待呢?

您可以正常使用该类型。将类的公共接口分解为一个公共项目,您的硬件模块和使用者都将引用该项目。您的硬件模块在某种依赖注入容器中注册一个类。我的示例将使用Unity:

public class HardwareModule : IModule
{
    IUnityContainer _container;
    public HardwareModule(IUnityContainer container)
    {
        _container = container;
    }

    public void Initialize()
    {
        _container.RegisterType<ICamera, Camera>();
    }
}

谢谢你,我会提前给你的
public class HardwareModule : IModule
{
    IUnityContainer _container;
    public HardwareModule(IUnityContainer container)
    {
        _container = container;
    }

    public void Initialize()
    {
        _container.RegisterType<ICamera, Camera>();
    }
}
public class HardwareConsumer
{
    IUnityContainer _container;
    public HardwareConsumer(IUnityContainer container)
    {
        _container = container;
    }

    public async void TakePhoto()
    {
        ICamera camera = _container.Resolve<ICamera>();

        var result = await camera.TakePhoto;
    }
}
public class HardwareConsumer2
{
    ICamera _camera;
    public HardwareConsumer2(ICamera camera)
    {
        _camera = camera;
    }

    public async void TakePhoto()
    {
        var result = await _camera.TakePhoto;
    }
}