gpt4 book ai didi

c# - Unity【依赖】注入(inject)与继承

转载 作者:可可西里 更新时间:2023-11-01 08:59:56 31 4
gpt4 key购买 nike

我的问题如下:我有一个名为 ApplicationController 的基本 Controller (ASP.Net MVC Controller ),我希望我的所有 Controller 都继承自它。这个基本 Controller 有一个 ILogger 属性,标有 [Dependency] 属性。 (是的,我知道我应该使用构造函数注入(inject),我只是对这个属性感到好奇)。

我创建了容器,注册了类型,更改了默认工厂,一切都很好。问题是当我尝试在派生 Controller 中使用我的 Logger 属性时,它没有得到解决。

我做错了什么?为什么容器在创建派生 Controller 时不解析基类依赖?

代码示例:


应用程序 Controller :

public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }

}

派生 Controller :

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 Controller 工厂:

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 的新手,所以我可能做错了什么。

谢谢,阿美。

最佳答案

据我所知,Unity 只会解析公共(public)属性。因此,您的 protected 属性(property)将不会得到解决。

关于c# - Unity【依赖】注入(inject)与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1007325/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com