Как сопоставить различные типы с одним экземпляром, используя Ninject? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть это:

public class DbContext : System.Data.Entity.DbContext, IDbContext
{
}

Моя конфигурация Ninject:

public override void Load()
{
    Bind<IDbContext>().To<DbContext>().InRequestScope().WithConstructorArgument("connectionString", ConfigurationManager.AppSettings["DefaultConnectionString"]);
}

Итак, как мне получить тот же экземпляр DbContext в другом классе, например:

public class ExampleClass()
{
   ...

   public ExampleClass(DbContext myDbContextDependency)
   {
      ...
   }
}

Обновление 1:

IDbContext - это мой шаблон UnitOfWork , он живет в моем доменном слое :

public interface IDbContext
{
    void SaveChanges();
}

И мне нужно DbContext для использования в моем BaseRepository:

public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : Entity
{
   ...

   //I'm using DbContext here:
   protected BaseRepository()
   {
      this.DbSet = DbContext.Set(typeof(TEntity));
   }

   //and here:
   public virtual void Edit(TEntity entity)
   {
      this.DbContext.Entry(entity).State = EntityState.Modified;
   }
}

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вы должны ввести IDbContext, а не DbContext:

public class ExampleClass()
{
   ...

   public ExampleClass(IDbContext myDbContextDependency)
   {
      ...
   }
}
0 голосов
/ 18 октября 2011

Я нашел решение, используя сервисный локатор Ninject, и забрал экземпляр DbContext:

public class ExampleClass()
{
    protected DbContext DbContext
    {
        get
        {
                                                                        //Here I do the trick I wanted
            return DependencyResolverFactory.Instance.Get<IDbContext>() as DbContext;
        }
    }

    ...
}
...