0

私は最近大規模なプロジェクトに参加しましたが、UnityとIOC / DIの経験はほとんどなく、Unityコンテナーで定義されたときにインスタンスがどのように作成されるかについての説明を探しています。

次のコードが与えられます。

//Unity構成

container.RegisterAsSingleton<IService, Service>();

//基本コントローラークラスの参照

private readonly IService _Service;

protected DefaultController(IService Service)
{
    _Service = Service;
}

protected string UseService(string id)
{
    return _Service.Method(id);
}

(MVCソリューションで)類似したものを使用してインスタンスを初期化する必要がありますか?

_Service = DependencyResolver.Current.GetService<IService>();

または、Serviceメソッドが最初に呼び出されたときにインスタンスが作成されますか?

_Service.Method(id);

必要に応じて、このコードを配置するのに最適な場所を見つけようとしています。

4

1 に答える 1

1

もちろんわかりませんが、通常、DIを使用するMVCプロジェクトは、DIコンテナーがIServiceインスタンスの作成に使用されるだけでなく、IServiceに依存するDefaultControllerにも使用されるように接続されています。

MVCフレームワークには、UnityやWindsorなどのDIコンテナーを使用するなど、独自の構築ロジックを提供するために使用できる拡張ポイントがあります。プロジェクトですでにDIが使用されている場合は、おそらくそのように設定されています。

したがって、すべてが正しく接続されている場合(DIコンテナーがコントローラーを作成し、IServiceがDIコンテナーに登録されている場合)、IServiceの依存関係がDefaultControllerコンストラクターに注入されます。何もする必要はありません。コントローラーメソッドが呼び出されたときに、IServiceがすでに作成されているはずです。

于 2012-10-18T12:38:24.223 に答える