コントローラーコンストラクターにロールインした「共通の」作業があるMVC3コントローラーがあります。その一般的な作業の一部は、Unity を介して動的に解決される疎結合クラス (たとえばourService
) によって行われます (IoC / 依存性注入用)。ourService
コントローラーのコンストラクターでは null (つまり、解決されていません) ですが、通常のコントローラー メソッドでは適切に解決されます。以下の簡単なデモ コードは、問題を示しています。
public class Testing123Controller : BaseController
{
[Dependency]
public IOurService ourService { get; set; }
public Testing123Controller()
{
ourService.SomeWork(1); // ourService=null here !!
...
}
public ActionResult Index()
{
ourService.SomeWork(1); // resolved properly here here !!
...
}
...
}
質問:
- Unity の解決動作にこの違いがあるのはなぜですか? 私は一貫した行動を期待します。
- コントローラーのコンストラクターでも Unity がこれを解決するように修正するにはどうすればよいですか?
Unity 2.0 をセットアップした方法は次のとおりです。
Global.asax
Application_Start()
{
...
Container = new UnityContainer();
UnityBootstrapper.ConfigureContainer(Container);
DependencyResolver.SetResolver(new UnityDependencyResolver(Container));
...
}
public static void ConfigureContainer(UnityContainer container)
{
...
container.RegisterType<IOurService, OurService>();
...
}
IOurService.cs
public interface IOurService
{
bool SomeWork(int anInt);
}
OurService.cs
public class OurService: IOurService
{
public bool SomeWork(int anInt)
{
return ++anInt; //Whew! Time for a break ...
}
}