2015-07-29 2 views
2

Каждый учебник или пример, который я нашел для использования DI в ASP.NET 5, показывает только, как он работает с контроллерами и Razor Views. Мне нужно использовать DI для других классов, но не знаю, как правильно разрешать типы и предоставлять экземпляр. Прямо сейчас у меня есть экземпляр HackyDependencyResolver, который все должно ссылаться, чтобы получить соответствующие экземпляры. Я хочу либо обратиться к распознавателю службы ASP.NET, либо следовать другой лучшей практике для разрешения зависимостей.ASP.NET 5 инъекции зависимостей вне контроллеров и представлений

Например, если у меня есть

public class SomeClass 
{ 
    public SomeClass(IUseMe useMe) 
    { 
    } 
} 

, который не является MVC контроллер ASP.NET. Мне нужен шаблон для разрешения правильного экземпляра для IUseMe при создании SomeClass. Конечно, я могу сделать свою собственную глобальную фабрику, но это лучший способ?

+0

Каковы другие классы, которые вы хотите ввести? – 3dd

+0

@ 3dd Я обновил вопрос на примере того, что я хочу сделать. Благодарю. – jltrem

+0

SomeClass нужно будет ввести в «Контроллер», чтобы это слишком работало, см. Класс 'Controller', построенный с использованием DI, и все его зависимости/должны быть удовлетворены DI – 3dd

ответ

1

DI не имеет ничего общего с asp.net, контроллерами или представлениями. В конце концов все классы. Учитывая, что действие является точкой входа в ваше приложение, необходимо ввести любую необходимую вам службу, сама служба имеет некоторые зависимости, и они будут автоматически введены контейнером DI при создании экземпляра контроллера.

Все, что вам нужно сделать, это определить свои услуги (не каждый объект нуждается в впрысках), затем зарегистрируйте эти услуги в контейнере Di.

Как мне разрешить IUseMe, чтобы я не зависел от конкретной реализации?

У вас нет. Di Container делает это на основе конфигурации, когда контроллер создается. Все имеет поток, вы не просто выбираете классы из воздуха и говорите «Я хочу, чтобы это создавалось контейнером Di». ОК, вы могли бы, но это был бы неправильный подход.

Весь смысл использования контейнера DI не должен заботиться о создании служб. Структура заботится о интеграции с контейнером, ваша единственная задача - правильно определить классы и настроить контейнер.

Смежные вопросы