私の質問は次のとおりです。ApplicationControllerというベースコントローラー(ASP.Net MVCコントローラー)があり、すべてのコントローラーがそれを継承するようにします。このベースコントローラーには、[Dependency]属性でマークされたILoggerプロパティがあります。(はい、コンストラクターインジェクションを使用する必要があることはわかっています。この属性について知りたいだけです)。
コンテナを作成し、タイプを登録し、デフォルトのファクトリを変更しました。すべて問題ありません。問題は、派生コントローラーでLoggerプロパティを使用しようとしても、解決されないことです。
私は何が間違っているのですか?派生コントローラーを作成するときに、コンテナーが基本クラスの依存関係を解決しないのはなぜですか?
コードサンプル:
ApplicationController:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
派生コントローラー:
public class HomeController : ApplicationController
{
public HomeController()
{
}
public ActionResult Index()
{
_logger.Log("Home controller constructor started.");
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
Unityコントローラーファクトリー:
public class UnityControllerFactory : DefaultControllerFactory
{
private readonly IUnityContainer _container;
public UnityControllerFactory(IUnityContainer container)
{
_container = container;
}
protected override IController GetControllerInstance(Type controllerType)
{
return _container.Resolve(controllerType) as IController;
}
}
Global.asax.csサンプル:
protected void Application_Start()
{
_container = new UnityContainer();
_container.RegisterType<ILogger, Logger.Logger>();
UnityControllerFactory factory = new UnityControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);
RegisterRoutes(RouteTable.Routes);
}
私はUnityを初めて使用するので、何か間違ったことをしたのかもしれません。
ありがとう、亜美。