我正在使用.net core 2.2创建一个小型控制台应用程序,并且试图通过我的应用程序实现依赖项注入。 我遇到了一些未处理的异常。
Person.cs
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int? Age { get; set; }
public string Gender { get; set; }
}
IPersonRepository
public interface IPersonRepository
{
bool AddPerson(Person entity);
IEnumerable<Person> GetAllPersons();
}
PersonRepository.cs
public class PersonRepository:IPersonRepository
{
private readonly IPersonRepository _personRepository;
public PersonRepository(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
public bool AddPerson(Person entity)
{
_personRepository.AddPerson(entity);
return true;
}
public IEnumerable<Person> GetAllPersons()
{
throw new System.NotImplementedException();
}
}
Program.cs
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleAppWithDI
{
internal static class Program
{
private static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddTransient<IPersonRepository, PersonRepository>()
.BuildServiceProvider();
var personRepositoryObj = serviceProvider
.GetService<IPersonRepository>();
personRepositoryObj
.AddPerson(new Person
{
Id = 1,
Name = "Tom",
Age = 24,
Gender = "Male"
});
}
}
}
我得到这个Exception。有人可以告诉我我在哪里犯错吗?我也想知道何时使用DI在控制台应用程序(不运行24 * 7)中制作.exe是安全的?
任何帮助将非常感激。谢谢
答案 0 :(得分:1)
您的人员存储库采用IPersonRepository,依赖注入器正在尝试创建一个需要注入自身的类。您可能想改用DbContext。此代码假定您已创建名为ApplicationContext
private readonly ApplicationContext _context;
public PersonRepository(ApplicationContext context)
{
_context = context;
}
public bool AddPerson(Person entity)
{
_context.Persons.Add(entity);
_context.SaveChanges();
return true;
}
答案 1 :(得分:0)
public PersonRepository(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
这是您的问题。您需要从构造函数中删除IPersonRepository参数,因为它试图在自身内部创建其自身的实例。因此,您的通函参考问题