Не могу понять, как заставить это работать DI - PullRequest
1 голос
/ 09 апреля 2011

Хорошо, я чувствую себя полным идиотом.Я прочитал документы и до сих пор не могу заставить это работать с Ninject.

 public class ContextAdapter:IDbSetProvider
{
    private readonly IContextFactory _contextFactory;
    #region Implementation of IDbSetProvider

    public ContextAdapter(IContextFactory contextFactory)
    {
        this._contextFactory = contextFactory;
    }

    public IDbSet<TEntity> CreateDBSet<TEntity>() where TEntity : class
    {
        var context = _contextFactory.Create();
        return context.Set<TEntity>();
    }

    #endregion
}

Как вы видите, мне нужно добавить конструктор для класса выше.Ну, это не так хорошо.Помогите!!прежде чем я вернусь к написанию Perl-кода.Шутка !!LOL

Мысли, люди?

1 Ответ

2 голосов
/ 09 апреля 2011

Ваш класс ContextAdapter не реализует IContextFactory. У вас есть класс, как class Factory : IContextFactory? Вот чего вам здесь не хватает. Затем вы можете связать его kernel.Bind<IContextFactory>.To<Factory>(), и Ninject создаст этот тип для вас, когда вы запрашиваете объект или когда ему необходимо выполнить контракт. Я думаю, что ваше замешательство происходит из-за синтаксиса связывания. В общем, вы не связываете параметры вместе, вы привязываете интерфейсы к конкретным реализациям. Вот краткий пример:

Bind<IEngine>.To<GasEngine>();
Bind<ICar>.To<Sedan>();

class Sedan : ICar
{
    public Sedan(IEngine engine) { }
}

// ...

kernel.Get<ICar>(); // get me a new car

Когда вы спросите Ninject о ICar, он выполнит его с тем, что было связано, Sedan. Sedan требует IEngine в своем конструкторе, который Ninject выполнит с GasEngine, поскольку это то, что было связано.

...