Ну, в идеале это никогда не должно быть проблемой. Все зависимости должны быть интегрированы в ваш контроллер, и любые зависимости, от которых зависят эти зависимости, также должны автоматически вводиться.
В MVC (почти) все начинается с контроллера. Таким образом, вы можете иметь:
public class HomeController : Controller {
protected IMyService myService { get; set; }
public HomeController(IMyService myService) {
this.myService = myService;
}
}
public class MyService {
protected IPrincipal principal;
public MyService(IPrincipal principal) { this.principal = principal)
}
Обратите внимание, что вам не нужно ничего делать, ваш сервис автоматически получает нужные зависимости, потому что ваш сервис был введен в ваш контроллер.
Однако могут быть случаи, когда вам нужно динамически создавать объект. В этом случае вы можете использовать MVC DependencyResolver.
var principal = DependencyResolver.Current.GetService<IPrincipal>();
Однако вам следует избегать этого, за исключением случаев, когда это абсолютно необходимо, поскольку это считается антишаблоном (известным как расположение службы). Иногда у вас нет большого выбора.
Если вы не хотите использовать инъекцию конструктора, вы можете использовать инъекцию свойства.
public class MyService {
[Inject]
public IPrincipal principal {get; set;}
}