1

わかりました、私は完全なばかのように感じます。私はドキュメントを読みましたが、まだこれを 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 コードの作成に戻る前に。冗談!笑

皆さん、どう思いますか?

4

1 に答える 1

2

クラス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

于 2011-04-09T00:45:30.540 に答える