2009-04-01 5 views
0

私は最近、Ninject 1.0からNinject 2.0を使って比較的大きなコントロールライブラリを更新しなければならなかったので、1.0でいくつかの問題を解決しました。アップデートはうまく行きましたし、Ninject 2.0はずっと速いと思います。Inversion of control containerのコントロールの反転?

しかし、将来この問題を回避するために、フィールドとプロパティ(本来のWebアプリケーションで使用したいIOCコンテナのメソッドを呼び出す)を注入する独自のインターフェイスを作成しました。ですから、私のコントロールライブラリは、特定のIOCコンテナに依存していないので、将来的にそのエリアの変更を速めることができます。

他の誰も同じことをしているのですか?

私はそれが達成されたことに満足していますが、理想的には私はそれを更新したいと思います。私のコントロールでは、これらの注入されたフィールドを保護されたものとして作成し、そのコントロールのコンストラクターに設定します。

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(ref _blogService); 
    Inject(ref _emailService); 
} 

私が上記で持っている問題は、私が実際にプロパティを設定すると、私は直接プロパティにそれを使用することはできませんすべてのオブジェクトの「参照」を使用しなければならないということです。

私はこれらの行に沿って何かをしたいと思いますが、それは可能ではないと思います。

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(_blogService, _emailService); 
} 

コードを整理したり、よりクリーンな方法で作業する方法のアイデアは誰にもありますか?私はまた、属性を避けたいので、開発者がコントロール内の特定のポイントに変数を挿入するように強制します。

すべての考えや気持ちを歓迎します。

ありがとう

+0

私は、ユーザーコントロール(コンストラクターの呼び出し方法を変更できない)の構築にアクセスできないと、ASP.NETユーザーコントロールに関する厄介なことの1つだと思います。申し訳ありませんが、私は有用な答えはありません。 –

答えて

1

プロパティの注入をサポートし、 "this"に依存関係を注入します。私の場合は

、私はStructureMap.BuildUp(this)を呼び出して、基本クラスを持っている、とのようなユーザーコントロールは、プロパティを持っているでしょう。私が持っているのStructureMapに固有の唯一のラインがベースにある

public IBlogService _blogService{get;set;} 
public IEmailService _emailService{get;set;} 

クラス。 ninjectでこれを行うことができれば、コードを呼び出してコントロールインスタンスに渡し、その設定に基づいてプロパティを注入させることができます。

1

あなたはそれが容器上にハード依存関係を考慮せずのIoCを活用するために使用することができます共有インターフェイスですGlenn Block

によって記載されているようにIServiceLocatorを見てみたいことがあります。

関連する問題