Dans mon projet MVC, j'ai installé mon MvcApplication_start():problème avec la compréhension Ninject Reliure/Injection
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
Et ai lié avec succès un sujet de mon IProductsRepository .Pour à MySqlProductsRepository:
public class NinjectControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel = new StandardKernel(new MyServices());
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (IController) _kernel.Get(controllerType);
}
public class MyServices: NinjectModule
{
public override void Load()
{
Bind<IProductsRepository>().To<MySqlProductsRepository>();
}
}
}
Mais j'utilise NHibernate, et j'ai une classe Session Factory séparée qui a une méthode GetSession() qui retourne un ISession.
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
NHibernateProfiler.Initialize();
return cfg.BuildSessionFactory();
}
public static ISession GetSession()
{
return SessionFactory.GetCurrentSession();
}
Je voulais le mettre en place pour que mon MySqlProductsRepository serait passé et objet ISession par Ninject quand il a été créé:
public class MySqlProductsRepository : IProductsRepository
{
private readonly ISession _session;
public MySqlProductsRepository(ISession session)
{
_session = session;
}
Et mon contrôleur serait remis une instance IProductsRepository:
public class AdminController : Controller
{
private readonly IProductsRepository _productsRepository;
public AdminController(IProductsRepository productsRepository)
{
_productsRepository = productsRepository;
}
MON PROBLÈME:
Je ne peux pas à comprendre en m y Container IoC où je lie mon IProductsRepository à mon Repository, comment enregistrer un ISession, comment transmettre un ISession à mon objet MyProductsRepository quand il est créé, et remettre un objet MyProductsRepository à mon Controller?
+1 trucs fantastiques - Comble une lacune sur le marché - cela mérite de devenir une réponse FAQ à ce genre de question ici! –
Merci Bob, parfait, va commencer à les lire maintenant, devrait être une aide majeure. – pghtech