Question

Je veux o lier mon contrôleur avec un paramètre qui est paresseux évalué.

 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            return controllerType == null
                       ? null
                       : (IController) _ninjectKernel.Get(controllerType);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

J'ai la prochaine reliure:

_ninjectKernel.Bind<IFilesRepository>().To<FilesManager>().WithConstructorArgument("storageFolderAbsolutePath", c => c.ToString());

Le problème est à la fonction lambda. Je veux revenir Server.MapPath ( « / ») ... mais je n'ai pas le contexte de la demande dans l'objet c. Comment puis-je l'ai envoyé?

Était-ce utile?

La solution

Je ne suis pas trop familier avec Ninject, mais vous devriez être en mesure d'enregistrer un fournisseur avec le conteneur pour être en mesure de résoudre un HttpContextBase. Ce faisant, le IFilesRepository peut maintenant prendre une HttpContextBase comme argument du constructeur, qui sera injecté par le conteneur, en utilisant le fournisseur, lors de la création d'une instance de IFilesRepository.

Pour enregistrer un fournisseur (en utilisant un délégué pour résoudre le service),

Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));

Sachez cependant que le style de vie d'un IFilesRepository aurait probablement besoin de passer à un mode de vie « par demande Web », comme le HttpContext.Current est créé par requête web, de sorte que vous ne voudriez pas aller maintenant sur que un IFilesRepository qui avait un style de vie plus longue. Vous voudrez peut-être abstraite sur la fonctionnalité « chemins mapping » afin que vous puissiez avoir un IFilesRepository avec un style de vie plus longue.

Autres conseils

Depuis la variable serveur est lié au courant HttpContext vous devrez récupérer à l'intérieur de la classe FilesManager (à l'aide d'une interface distincte à cette fin si vous voulez)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top