Используя ninject, я хочу создать поставщика для класса MyRepository
, который зависит от класса ApplicationDbContext
:
public class MyRepository<TEntity> : IMyRepository<TEntity>
where TEntity : MyBaseEntity
{
private ApplicationDbContext _dbContext;
public MyRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
// ...
}
Я видел этот документ что объясняет, как должны создаваться провайдеры, но я не уверен:
- Как передать аргумент
ApplicationDbConext
провайдеру - Как создать экземпляр универсального типа
Вот моя попытка:
public class MyRepositoryProvider : Provider<MyRepository>
{
protected override MyRepository CreateInstance(IContext context)
{
// how to create a generic instance of type T?
MyRepository myRepository = new MyRepository<T>(/*need ApplicationDbContext*/);
return myRepository;
}
}
Я не уверен, можно ли создать провайдер для универсального типа. Если нет, может ли кто-нибудь показать, как это можно сделать с помощью Factory interface а>?
Примечание. Я создал этот код обзор, объясняющий, почему мне нужен поставщик.
1)
Что происходит, когда вы отbind
IContext
доApplicationDbContext
и2)
используетеgeneric
binding
, как описано здесь: stackoverflow.com/a/10243699/2877982 - person Aage   schedule 03.11.2019IContext
— это контекст ninject (как описано здесь< /а>). Что касается другой ссылки, ответ не использует провайдера... - person Hooman Bahreini   schedule 03.11.2019binding
иresolving
вcontainer
и из него? НасчетIContext
... может просто привязатьApplicationDbContext
к себе или кfactory
? - person Aage   schedule 03.11.2019