Lorsque j'essaie de créer un nouveau IRepository<Tag>
en utilisant kernel.Get
, Ninject lève une exception. Est-ce que j'utilise Ninject correctement et les fixations sont-elles correctement configurées?Ninject ne peut pas créer d'objet. Exception levée lors de l'obtention du noyau
Méthode de classe NinjectDependencyResolver
:
private void AddBindings()
{
var mapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new TagProfile());
});
var mapper = mapperConfiguration.CreateMapper();
_kernel.Bind<BlogDbContext>().ToSelf().InRequestScope();
_kernel.Bind<IRepository<Tag>, Repository<Tag>>();
_kernel.Bind<IMapper>().ToConstant(mapper);
var repository = _kernel.Get<IRepository<Tag>>(); // exception thrown here
_kernel.Bind<ITagService, TagService>();
}
Classe Repository
:
`public class Repository<T> : IRepository<T> where T : class
{
private readonly BlogDbContext _db;
public Repository(BlogDbContext db)
{
_db = db;
}
}`
post-scriptum. Je ne sais pas si c'est important, mais son référentiel d'interface se trouve dans le même assemblage, et l'enregistrement de Ninject dans un autre.
Vous liez la 'BlogDbContext' portée de la demande, mais lorsque vous appelez' AddBindings', vous êtes dans un champ de demande? – mason
@mason, désolé, je ne comprends pas ce que vous voulez dire. Mais quand j'essaye 'InSingletonScope() \t' tout fonctionne bien. Mais Singleton ne voudrait pas utiliser. – Lightness
Une requête est une requête HTTP, comme un client accédant à une page. Lorsque vous définissez la durée de vie de vos dépendances, vous pouvez faire en sorte que l'objet soit vivant uniquement pour cette requête particulière, ce qui correspond à la façon dont vous l'avez actuellement. Mais cela signifie que la dépendance ne pourra pas être résolue en dehors d'une requête, donc plus tard quand elle a essayé d'obtenir un 'IRepository' elle ne peut pas satisfaire le constructeur pour 'Repository '. Ou du moins c'est ma conjecture quant à ce qui se passe. –
mason