Вызов метода в классе с использованием внедрения зависимости - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть базовое веб-приложение. NET, в котором настроена зависимость:

    public class FooController : Controller
    {
        private readonly IFooRepository FooRepository;

        public FooController(IFooRepository fooRepository)
        {
            FooRepository = fooRepository;
        }
    }

    public class FooRepository : IFooRepository
    {
        private readonly IFooContext FooContext;

        public FooRepository(IFooContext fooContext)
        {
            FooContext = fooContext;
        }
    }

    public class FooContext : BaseContext, IFooContext
    {
        public FooContext(ApplicationDbContext appDbContext) : base(appDbContext)
        {
        }
    }

И все работает нормально.

Я хочу создать класс, который вызывает метод в FooRepository без использования IFooRepository в конструкторе. Возможно ли это?:

  public class Bar
    {
        public Bar()
        {
             FooRepository.GetMyFoo();
        }
    }

1 Ответ

0 голосов
/ 21 апреля 2020

Просто создайте другой интерфейс для методов, которыми вы хотите «поделиться». И не забудьте также добавить эту реализацию интерфейса в свой контейнер DI.

Теперь ваш IFooRepository не имеет GetMyFoo(), а потребитель IGetMyFooAble не знает больше, чем ему нужно.

public class FooController : Controller
{
    private readonly IGetMyFooAble FooRepository;

    public FooController(IGetMyFooAble fooRepository)
    {
        FooRepository = fooRepository;
        fooRepository.GetMyFoo();
    }
}

public class FooRepository : IFooRepository, IGetMyFooAble
{
    private readonly IFooContext FooContext;

    public FooRepository(IFooContext fooContext)
    {
        FooContext = fooContext;
    }

    public void GetMyFoo() { /* your stuff */ }
}


public interface IGetMyFooAble
{
    public void GetMyFoo();
}

public class FooContext : BaseContext, IFooContext
{
    public FooContext(ApplicationDbContext appDbContext) : base(appDbContext)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...