我构建了一个.NetCore 2.1项目,并有一个如下所示的基控制器类
public class MyBaseController:Controller
{
#region Properties
protected readonly ILogger Logger;
protected readonly VVDCCore.Tools.Interfaces.IResourceManager Resx;
protected IDictionary<string,string> ExtraParameters;
#endregion
#region CONSTRUCTOR
public BaseController(ILogger<BaseController> logger,
VVDCCore.Tools.Interfaces.IResourceManager resxManager)
{
Logger = logger;
Resx = resxManager;
}
#endregion
}我所有的控制器都是这个基类的子级。
我有一个服务(ResourceServices,实现IResourceManager接口),它允许根据键和上下文检索值。
我知道如何通过IActionContextAccessor接口访问服务中控制器的名称和动作的名称。但是我想获得当前控制器对象。在服务中,我需要从我的ExtraParameters中访问属性baseController,但不知道如何做到这一点
总之,我想做这样的事情
public class ResourcesServices{
public ResourceServices([CurrentController] controller)
{
var extraParameters = ((MyBaseController)controller).ExtraParameters;
}
}有什么办法吗?提亚
发布于 2018-10-09 10:10:52
不要将控制器对象引用到其他类。
相反,只提供所需的信息类。
public class ResourcesServices
{
public ResourceServices(IDictionary<string, string> parameters)
{
var extraParameters = parameters;
}
}如果您使用的是依赖注入,并且ExtraParameters只在运行时才知道(ResourcesServices实例不能实例化)。
然后考虑将参数传递给使用参数的ResourcesServices方法。
public class ResourcesServices
{
public ResourceServices() { }
public void DoSomething(IDictionary<string, string> parameters)
{
var extraParameters = parameters;
}
}当ResourceServices类要求在构造函数中提供"ExtraParameters“时,可以创建工厂类,它将负责创建具有运行时值的ResourceServices的适当实例。
public class ResourcesServicesFactory
{
public ResourcesServicesFactory() { }
public ResourcesServices Create(IDictionary<string, string> parameters)
{
return new ResourcesServices(parameters);
}
}
public class ChildController : MyBaseController
{
private readonly ResourceServiceFactory _factory;
public ChildController(
ILogger<BaseController> logger,
VVDCCore.Tools.Interfaces.IResourceManager resxManager,
ResourceServiceFactory factory) : base(logger, resxManager)
{
_factory = factory;
}
public IActionResult Get()
{
var service = _factory.Create(ExtraParameters);
service.DoSomething();
}
}将控制器作为应用程序的入口点,主要责任是将“输入”传递给服务,并将输出返回给客户端。
https://stackoverflow.com/questions/52718392
复制相似问题