2009-10-05 5 views

Répondre

1

Idéalement, vous ne devriez pas injecter de services dans le modèle car cela vous obligerait à enregistrer votre modèle avec le conteneur.

Si vous devez utiliser un service dans une instance de modèle, passez le service en tant qu'argument de méthode, puis vous pouvez injecter le service dans le contrôleur.

Sans savoir plus sur le scénario, il est difficile de donner des indications plus claires, mais les grandes lignes suivantes peuvent aider:

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 
    } 
} 
+0

Un petit point est que beaucoup (la plupart?) Des conteneurs ces jours-ci ne nécessitent pas enregistrement explicite de conteneur avant de résoudre une classe concrète hors du conteneur. Donc, vous pourriez théoriquement résoudre la classe "Model" si cela dépendait de IService. –

Questions connexes