Obtenir une instance d'un objet avec Ninject
J'ai installé sur mon projet Ninject.MVC3 via Nuget.
Jusqu'à présent tout va bien, mais comment récupérer l'instance d'un objet?
public ActionResult MyAction()
{
var myObject = /* HERE ??*/
}
Dans le constructeur du contrôleur Je n'ai aucun problème!
public class AccountController : Controller
{
public AccountController(IRepository repository) { ... } //This works!!
}
21
demandé sur
ridermansb
2011-10-11 00:08:51
2 réponses
La raison pour laquelle cela fonctionne est que le ControllerFactory recherche DI et l'ajoute automatiquement. Si vous voulez obtenir une instance spécifique, vous pouvez le faire:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ICoolObject>().To(CoolObject);
}
public ActionResult MyAction() {
var myObject =
System.Web.Mvc.DependencyResolver.Current.GetService(typeof (ICoolObject));
}
Attention cependant. Cela se fait assez souvent avec ceux qui sont nouveaux à L'Injection de dépendance (moi inclus). La question est: pourquoi avez-vous besoin de faire de cette façon?
35
répondu
Buildstarted
2011-10-10 20:23:20
protected void Application_Start()
{
HttpContext.Current.Application["UnityContainer"] = System.Web.Mvc.DependencyResolver.Current.GetService(typeof(EFUnitOfWork));
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public static IRepositoryWrapper IoCSession
{
get { return HttpContext.Current.Application["UnityContainer"] as IRepositoryWrapper; }
set { HttpContext.Current.Application["UnityContainer"] = value; }
}
BuildStarted j'aime cette façon, s'il y a une autre manière, veuillez nous conseiller.. Riderman vous pouvez utiliser UnitOfWork aussi comme ci-dessous
var container = new UnityContainer();
container.RegisterType<IRepositoryWrapper>(new EFUnitOfWork());
0
répondu
dewelloper
2013-10-15 22:50:40