2011-01-09 13 views
0

キャッスルをIoCとして使用しましたが、同じプロジェクトでNhibernate/Castle(IoC)を使用して問題が発生しましたので、Ninjectに移動しました。今の質問に取得するために、私はこのクラスを持っている:Ninject and configuration

class CustomModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<Interfaces.ICafe>().To <Concrete.Tea>(); 
    } 
} 

Concreteは別のプロジェクトであり、Interfaces.ICafeは別のプロジェクトです。城では、私は開発者にインターフェイスのDLLを与えて、そのインターフェイスを実装する新しい具象を実装してapp.configでそれを設定するように頼んだので、クラス名を実装しても機能します。なぜなら、 app.configなので、もし彼がConcrete.Coffeeのように作ったとしてもそれはうまくいくでしょう。

しかし、Ninjectでは、同じクラス名 "Tea"を使用してコンクリートを作る必要があります。そうでなければ、ハードにコード化されているため動作しません。

私はNinjectを新しくしていて、おそらく何かが紛失していることを知っていますか?

答えて

1

IoCバインディングをコードとXMLから外すという一般的な傾向がありました。ほとんどb/cあなたintellisenseとスクランブルの実行時のフィードバックを得る。だから、はい、あなたはコンクリートへの参照を持っている必要があります。あなたがそうしたことをやろうとすれば。

1

具体的な実装の参照を避ける場合は、実行時に実装をロードするためにconventions拡張を使用できます。

-Ian

+0

サンプルを提供できますか? – Stacker

0

私はそれを使用していないが、あなたはXMLでセットアップにあなたのマッピングを可能にNinject.Extensions.Xmlのリリース候補があります。しかし、私はポールに同意する必要があり、私は一般的にこのようにすることから恥ずかしがります。また、Ninject.Extensions.Conventionsもあります。