Контейнер IOC лучше всего использовать для создания компонентов;но это не должно использоваться для создания объектов модели.Например, это good :
public ActionResult SignUp(string username, string password)
{
var user = new User(); // Your model object
user.Username = username; //...
_repository.Save(user);
return Redirect(...);
}
Объект модели сам по себе не должен принимать никаких зависимостей, поэтому его не нужно разрешать из контейнера IOC.То же самое относится к моделям представлений:
public ActionResult Show(int userId)
{
var user = _repository.Load<User>(userId);
var model = new ShowUserModel(user);
return View(model);
}
После создания модель модель / представление должна быть фактически доступна только для чтения, поэтому любая необходимая информация должна передаваться через контроллер - она не должна принимать введенные зависимости.,
Если вам действительно, действительно нужно динамически создавать компоненты внутри действия, вы можете сделать это следующим образом:
class HomeController : Controller
{
readonly Func<IFooService> _fooServiceFactory;
public HomeController(Func<IFooService> fooServiceFactory)
{
_fooServiceFactory = fooServiceFactory;
}
public ActionResult SomeAction()
{
var service = _fooServiceFactory(); // Resolves IFooService dynamically
service.DoStuff();
}
}
Любой приличный контейнер IOC должен уметь обрабатывать Func<T>
инъекцию,