저는 IoC를 처음 사용하고 현재 프로젝트에서 Autofac을 사용하고 있습니다. 'Autofac Circular Component Dependency Detected'오류
나는이 다음 2 개 클래스 : 처음public class UserService : IUserService
{
private readonly IUserRepository _repo;
private readonly IMailService _mailService;
public UserService(IUserRepository repo, IMailService mailService)
{
_repo = repo;
_mailService = mailService;
}
}
public class MailService : IMailService
{
private readonly IMailRepository _repo;
private readonly IUserService _userService;
public MailService(IMailRepository repo, IUserService userService)
{
_repo = repo;
_userService = userService;
}
}
, 내 UserService 상기 MailService 인터페이스 클래스의 인스턴스를 필요로하지 않았다 클래스,하지만 지금은 않습니다, 그리고 그것은 UserService 생성자에이를 도입 이후의이 그 순환 종속성 오류가 발생하여 초보자 인 경우이를 해결하는 방법을 모르겠습니다.
이 내 클래스가 현재 Autofac에 등록하는 방법입니다하십시오 UserService는 IMailService을 필요로하고 MailService 인터페이스는 종속성 루프를 IUserService을 필요로
var builder = new ContainerBuilder();
// controllers
builder.RegisterControllers(Assembly.GetAssembly(typeof(UsersController)));
// register other classes
builder.RegisterType<UserRepository>().As<IUserRepository>();
builder.RegisterType<MailRepository>().As<IMailRepository>();
builder.RegisterType<UserService>().As<IUserService>();
builder.RegisterType<MailService>().As<IMailService>();
'IUserService'에서'MailService'가 필요로하는 메소드와'IMailService'에서'UserService'가 필요로하는 메소드를 설명 할 수 있습니까? 이와 같이 원형 종속성은 일반적으로 작은 리펙토링으로 인해 묵시적인 제 3의 개념을 명시 적으로 나타냅니다. –
항상 그런 것은 아니지만 순환 종속성은 종종 디자인 결함을 나타냅니다. 더 많은 코드 (실제로'MailService'와'UserService'가하는 것)를 보여 주면, 우리는 이것이 사실인지와 이것을 고치는 방법을 알 수있을 것입니다. 아마도 당신은 다른 추상화를 놓치고 있습니다. – Steven