使用静态主方法的非静态代码

时间:2016-08-10 15:33:48

标签: c# c#-4.0

我在使用静态main方法很好地使用后端代码时遇到了麻烦。

这是后端的东西:

public interface ITicketGenerationService
{
    string CreateTicket(DateTime begin, DateTime end);       
}

public class TicketGenerationService : ITicketGenerationService
{
    public static IRepository<Ticket> Repository { get; set; }

    public TicketGenerationService(IRepository<Ticket> repository)
    {
        Repository = repository;
    }

    public string CreateTicket(DateTime begin, DateTime end)
    {
         //do stuff with Repository
         //return status string to Main method
    }

}

这是我的控制台应用程序开始的地方:

public class TicketMain
{
    public ITicketGenerationService TicketGenerationService { get; set; }

    static void Main(string[] args)
    {
          var priorityOneTickets = TicketGenerationService.CreateTicket(begin, end);
    }
}

所以我最初得到这个错误:

  

非静态字段,方法或者需要对象引用   物业'TicketMain.TicketGenerationService'

如果我将CreateTicket更改为静态,我会收到另一个错误:

  

TicketGenerationService不会实现接口成员   ITicketGenerationService.CreateTicket(DateTime,DateTime)。   ITicketGenerationService.CreateTicket(DateTime,DateTime)不能   实现一个接口成员,因为它是静态的。

如果我尝试添加此内容:

  

var ticketingService = new TicketGenerationService();

到主要的方法,我担心会搞乱我的依赖注入(autofac)。

我理解错误,但我无法使所有内容保持静态,我担心如果我开始实例化,我将失去通过依赖注入获得的所有数据。

到底有没有?

谢谢!

1 个答案:

答案 0 :(得分:6)

它不是错误所指的TicketGenerationService.CreateTicket方法,而是TicketGenerationService类中的TicketMain属性。

您只需将房产更改为static

public static ITicketGenerationService TicketGenerationService { get; set; }