c# - C# 中的接口(interface)和类

标签 c# class interface repository

我收到以下错误:

test.Services.JobService' does not contain a constructor that takes 0 arguments.

这是代码:

工作服务.cs:

namespace TesteUltrafan.Services
{
    public class JobService
    {
        private readonly IRepository _repository;

        public JobService(IRepository repository)
        {
            _repository = repository;
        }

        public Job CreateJobBanker()
        {
            var banker = new Job();

            string id = Guid.NewGuid().ToString("N");

            Console.WriteLine("Novo job banker id: {0}", id);

            banker.Id = id;
            banker.Type = JobType.Banker;
            banker.CreatedAt = DateTime.Now;

            Console.WriteLine("Salvando job banker id: {0}", id);

            Job jobBanker = _repository.SaveJob(banker);

            return jobBanker;
        }
    }
}

程序.cs:

public class Program
{
    public static void Main()
    {
        var jobService = new JobService(); <---- Here is the error.

        Console.WriteLine("Creating job banker, creation:");

        Job jobBanker = jobService.CreateJobBanker();

        Console.WriteLine("Job banker: {0}", jobBanker);
    }
}

工作.cs:

public class Job
{
    public string Id { get; set; }
    public DateTime CreatedAt { get; set; }
    public JobType Type { get; set; }
}

工作类型.cs:

public enum JobType
{
    Actor = 1,
    Agricultural = 2,
    Banker = 3,
    EngineerCivil = 4,
    Another = 5,
}

最佳答案

您要么需要在您的 JobService 类中创建一个无参数构造函数(我不会这样做,因为那样您的类将无法正常工作 - 将不会引用任何存储库)或者最好传递一个Repository 实例作为构造此实例时的参数。

所以代码最好应该是这样的:

public class Program
{
    public static void Main()
    {
        var jobService = new JobService(new Repository()); 

        Console.WriteLine("Creating job banker, creation:");

        Job jobBanker = jobService.CreateJobBanker();

        Console.WriteLine("Job banker: {0}", jobBanker);
    }
}

Repository 应该是一个实现IRepository 接口(interface)的类。如果不传递此实例,您的 CreateJobBanker 将无法工作。

虽然推荐使用一些 IoC 容器,因为您的代码遵循控制反转原则(您可能甚至没有意识到这一点)。

关于c# - C# 中的接口(interface)和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21353755/

相关文章:

c# - 如果 BIGENDIAN 在编译时未解析,为什么它是一个指令?

c# - 在 MVVM 应用程序中存储应用程序设置/状态的位置

python - 将自引用传递给实例化类

python - JSON 编码 Python 类列表

c# - 如何在 C# 3.5 中对泛型方法施加接口(interface)约束?

swift - Swift 中的委托(delegate),我们需要它们吗?

c# - iTextSharp 和 PdfTable 的问题

c# - 如何在 View 模型中存储 linq 查询结果

python - 如何建立Python项目?

c# - 关于C#接口(interface)的问题