首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多项目解决方案对象LifeTime

多项目解决方案对象LifeTime
EN

Stack Overflow用户
提问于 2012-05-05 23:43:13
回答 1查看 133关注 0票数 1

我承认我是C#的新手,我有以下问题。

假设您有一个包含三个项目(A、B、C)的解决方案。项目C引用B,B和C都引用A。B是入口点。我在项目A中的一个类中有一个列表,它是这样的:

项目A:

代码语言:javascript
复制
public class ProcessDuration
    {
        public List<TicketTimer> DurationList = new List<TicketTimer>();

        public void AddProcesstime(string Ticket, int Count, Process_Step Step, Process_Status Status, DateTime Time)
        {
            Ticket ccStart = new Ticket();
            ccStart.RecordTime(Ticket, Count, Step, Status, Time);
            DurationList.Add(ccStart);
        }
...
}

项目B:

代码语言:javascript
复制
class testB
{
          public TicketProcessDuration TD = new TicketProcessDuration();
          TD.StartProcessMonitor(ticketMain, request.DataRecords.Count);
}

项目C:

代码语言:javascript
复制
class testC
{
        TD.StartProcessMonitor(ticketMain, request.DataRecords.Count); //Error here because TD scope
}

我想从项目B和C添加到列表中,所以我在B中创建了一个类为ProjectDuration的对象。但是由于作用域的原因,我不能从项目C访问它。

你有什么建议?我该如何解决这个问题?我还想知道如何在垃圾收集器之前销毁对象TD?

任何紧急的帮助都将不胜感激。如果我需要阅读一些区域以更好地了解这些情况,请让我知道…但是首先要解决方案!

致以亲切的问候,

EN

回答 1

Stack Overflow用户

发布于 2012-05-05 23:53:02

B创建C吗?如果是这样的话,让B在创建时将ProcessDuration的实例提供给C的构造函数。更好的做法是通过B的构造函数向B提供ProcessDuration,这样每个类都可以用模拟的或假的ProcessDuration进行测试。

代码语言:javascript
复制
  public class TestB
  {
      private TestC C { get; set; }
      private ProcessDuration TD { get; set; }

      public TestB(ProcessDuration td)
      {
           this.TD = td;
           this.C = new TestC(td);
      }

      public void DoSomething()
      {
           this.TD.StartProcessMonitor( ... );
           this.C.DoSomethingEsle();
      }
  }

  public class TestC
  {
      private ProcessDuration TD { get; set; }

      public TestC(ProcessDuration td)
      {
          this.TD = td;
      }

      public void DoSomethingElse();
      {
          this.TD.StartProcessMonitor(...);  // or just continue using it???
      }
 }

这被称为构造函数注入,它可以说是在相关类之间传递依赖关系的最佳方式。最终,您可以开始使用dependency injection框架为您管理这些内容,但刚开始我会手动完成,直到您了解它在做什么,然后再使用框架为您管理这些内容。

当然,这可能不是您的确切场景。也许B和C都是由其他东西创建的。在这种情况下,您可以只让类将相同ProcessDuration实例注入到B和C中(而不是让B创建C并传递实例)。

由于这是在web服务中运行的,因此您需要确保所有实例都是thread-safe的,即类中的数据不会在多个线程之间共享,或者,如果是这样的话,您已经内置了某种锁定机制,以确保一次只有一个线程可以访问数据。如果您不确定自己在做什么,您将希望避免使用静态实例来帮助确保线程安全。在进一步深入之前,对依赖注入和线程进行一些研究可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10463412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档