ASP.NET MVC Unity - внедрение на уровне модели - PullRequest
1 голос
/ 06 октября 2009

Я вижу тонны материала о том, как внедрить сервисы, используя ControllerBuilder.Current.SetControllerFactory, но что если я захочу разрешить свои сервисы в модели? Должен ли я получить их со слоя Controller и передать их?

1 Ответ

1 голос
/ 09 октября 2009

В идеале не следует вводить службы в модель, поскольку для этого потребуется зарегистрировать свою модель в контейнере.

Если вам нужно использовать службу в экземпляре модели, передайте службу в качестве аргумента метода, а затем вы можете внедрить службу в контроллер.

Не зная больше о сценарии, трудно дать более четкий совет, однако следующий план может помочь:

public interface IService
{
  // ... describe the contract the service must fulfill
}

public class Model
{
  public void DoSomething( IService service )
  {
    // ... do the necessary work using the service ...
  }
}

public class AController : Controller
{
  private readonly IService _injectedService;

  public AController( IService injectedService )
  {
    _injectedService = injectedService;
  }
  public ActionResult SomeAction( int modelId )
  {
    // ... get the model from persistent store
    model.DoSomething( _injectedService );
    // ... return a view etc
  }
}
...