【问题标题】:Best practice for MEF/Prism for this example?此示例的 MEF/Prism 最佳实践?
【发布时间】:2012-09-04 16:47:30
【问题描述】:

我有从 WCF 肥皂服务生成的类。

public partial class Job
{
  public ActivityId {get;set;}          
}

并对课程进行书面补充

public partial class Job
{
  public Activity Activity 
  {
    get
    {
      return *ActivityService*.Activities
                  .Where(x=>x.ActivityId==this.ActivityId)
                  .FirstOrDefault();
    }
  }
}

由于 Prism 的模块化特性,Activity 列表的类来自与生成 Job 的不同的 Web 服务和模块。

那么填充 ActivityService 的最佳方法是什么,或者有更好的方法吗?

干杯

【问题讨论】:

    标签: c# wcf prism mef


    【解决方案1】:

    你在你的服务上修复Export Attribute,你在你的客户端上修复Import,最后注册你的Catalog服务

    public partial class Job
    {
      [Import]
      public Activity Activity 
      {
        get
        {
          return *ActivityService*.Activities
                      .Where(x=>x.ActivityId==this.ActivityId)
                      .FirstOrDefault();
        }
      }
    }
    
    [Export]
    public class Activity
    {
     ...
    
    }
    

    【讨论】:

    • 感谢您的帮助。最后,我使用了装饰器模式来使用服务填充活动。
    • 我很乐意帮助你 Alxwest
    【解决方案2】:

    请注意,我采用了不同的方法并使用了装饰器模式。

    JobService 在构造时导入 ActivityService 并使用私有成员字段引用它。当 JobService 从 WCF 服务检索作业时,它会使用 ActivityService 填充 Activity。

    public class JobService
    {
      private ActivityService activityService;
    
      public JobService(ActivityService activityService)
      {
        this.activityService = activityService;
      }
    
      public Job GetJob(int jobId)
      {
        using(Client client = new Client())
        {
           Job j = client.GetJob(jobId);
    
           j.Activity = this.activityService.Activities
                            .Where(a=>a.ActivityId == j.ActivityId)
                            .FirstOrDefault();
           return j;
        }
      }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 2017-03-05
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多