いくつかのパターンの理論を教えてください。私はそれらを記述しようとしました、私は最善を尽くしましたが、私の記述が間違っていると思うので、助けてください))。理論: "サービスロケータ" "IOCコンテナ" "IOC" "DI"
1) "DI"と "IOC" - 同じ。
2)「IOCコンテナ」 - それはのような依存関係解決できるオブジェクトのインスタンスである:
void Test()
{
// create IOC Container to resolve
// dependences for SomeMethod method
var container = new SomeContainer();
container.For(typeof(IEmaleSender), typeof(SuperEmaleSender));
// Pass IOC Container to resolve dependences in SomeMethod
SomeMethod(container);
}
void SomeMethod(SomeContainer container)
{
IEmaleSender emailSender = container.Resolve(IEmaleSender);
emailSender.SendEmail();
}
3)「をサービスロケータは、」 - それは価値があるDictionary<Type, object>
が含まれている静的オブジェクトのようなものですキータイプのインスタンスこの静的オブジェクトには、Add
とGet
の2つのメソッドがあります。だから私は自分のアプリケーションの起動時にオブジェクトを追加し、どこからでも、それを要求することができます。
void Test()
{
// Assign instanse of SuperEmaleSender to Locator
SuperEmaleSender emailSender = new SuperEmaleSender()
SomeLocator.Add(typeof(SuperEmaleSender), emailSender);
SomeMethod();
}
void SomeMethod()
{
SuperEmaleSender emailSender = SomeLocator.Get(typeof(SuperEmaleSender));
emailSender.SendEmail();
}
4)「サービスロケータ」と「IOCコンテナ」を組み合わせることをお勧めします。したがって、アプリケーション開始時に "IOC Container"をインスタンス化し、どこからでも "Service Locator"を通じて要求することができます。
5)ASP MVC5では、「サービスロケータ」が既に含まれています。私はDependencyResolver
について話しています。
ありがとうございました。
だから、「IOCコンテナ」 - インスタンスだけではなく、静的なオブジェクトであるので、私はそれを使用するoredeでどこでもにこのコンテナを注入しなければなりませんか? –
1週間後にこのコメントに気づいたことはありがたいですが、最後に気づいたので、私は答えなければならないと思いました。 IoCコンテナは単なるインスタンスですが、どこにでも注入するべきではありません。 IoCコンテナの全目的は、どこにでも注入されることなく依存性を注入することです。 –