我收到以下错误:
test.Services.JobService'不包含构造函数 0个参数。
这是代码:
JobService.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;
}
}
}
program.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);
}
}
Job.cs:
public class Job
{
public string Id { get; set; }
public DateTime CreatedAt { get; set; }
public JobType Type { get; set; }
}
JobType.cs:
public enum JobType
{
Actor = 1,
Agricultural = 2,
Banker = 3,
EngineerCivil = 4,
Another = 5,
}
答案 0 :(得分:8)
您需要在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
接口的类。如果不传递此实例,则CreateJobBanker
将无效。
虽然建议使用一些IoC容器,因为您的代码遵循Inversion of Control原则(可能您甚至不知道这一点)。
答案 1 :(得分:0)
使用
var jobService = new JobService(new Repository());
因为否则您的JobService
没有IRepository
实例,并且当您尝试在NullReferenceException
内使用您的存储库时会抛出JobService
。
在您的代码中,您正在初始化JobService
而没有给它IRepository
参数,为了让您的代码进行编译,您需要在JobService
中定义一个没有{的构造函数{1}}参数如果你想这样做:
IRepository
现在您可以通过两种方式构建它:
public class JobService
{
private readonly IRepository _repository;
// New Constructor will make _repository null
public JobService()
{
}
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);
// NullReferenceException if you define a parameterless constructor
Job jobBanker = _repository.SaveJob(banker);
return jobBanker;
}
}
或
var jobService = new JobService();
var jobService = new JobService(new Repository());
实施:
IRepository