0
DbContextのユニティ子コンテナHierarchicalLifetimeManager MVCとWindowsサービス
しかし、今、私はそれを使用することはできませんWindowsサービスでは、私は次の操作を実行するつもりだったが、それはのServiceLocatorのようにたくさん見えるので、それが正しい感じていない:
using(var container = ConfiguredContainer.CreateChildContainer())
{
var statusUpdater = container.Resolve<IStatusUpdater>();
statusUpdater.UpdateStatus("test");
}
他のオプションはありますか?そして、登録の2種類がなくても、MVCアプリとWindowsのサービスで同じコードを使用する方法があります:
MVC:
container.RegisterType<IStatusRepo, StatusRepo>(new PerRequestLifetimeManager());
Windowsサービス:
はcontainer.RegisterType<IStatusRepo, StatusRepo>(new HierarchicalLifetimeManager());
「Unity」についてはわかりませんが、他のDIフレームワークでは、とにかく「MVC」と「Winサービス」に異なる登録コードを使用する必要があります。 'Resolve'メソッドへの直接呼び出しは、DIフレームワークが何のために作られているかのように常に「臭い」 - それが必要なときにインスタンスを解決するためです。私たちのコードで '.Resolve'メソッドを呼び出すと、何か間違っている可能性が最も高いことを意味します。コンストラクタにインスタンスを挿入し、それを使用するオブジェクトのライフスコープを変更することができます。 – Fabjan