我承认我是C#的新手,我有以下问题。
假设您有一个包含三个项目(A、B、C)的解决方案。项目C引用B,B和C都引用A。B是入口点。我在项目A中的一个类中有一个列表,它是这样的:
项目A:
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:
class testB
{
public TicketProcessDuration TD = new TicketProcessDuration();
TD.StartProcessMonitor(ticketMain, request.DataRecords.Count);
}项目C:
class testC
{
TD.StartProcessMonitor(ticketMain, request.DataRecords.Count); //Error here because TD scope
}我想从项目B和C添加到列表中,所以我在B中创建了一个类为ProjectDuration的对象。但是由于作用域的原因,我不能从项目C访问它。
你有什么建议?我该如何解决这个问题?我还想知道如何在垃圾收集器之前销毁对象TD?
任何紧急的帮助都将不胜感激。如果我需要阅读一些区域以更好地了解这些情况,请让我知道…但是首先要解决方案!
致以亲切的问候,
发布于 2012-05-05 23:53:02
B创建C吗?如果是这样的话,让B在创建时将ProcessDuration的实例提供给C的构造函数。更好的做法是通过B的构造函数向B提供ProcessDuration,这样每个类都可以用模拟的或假的ProcessDuration进行测试。
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的,即类中的数据不会在多个线程之间共享,或者,如果是这样的话,您已经内置了某种锁定机制,以确保一次只有一个线程可以访问数据。如果您不确定自己在做什么,您将希望避免使用静态实例来帮助确保线程安全。在进一步深入之前,对依赖注入和线程进行一些研究可能会有所帮助。
https://stackoverflow.com/questions/10463412
复制相似问题