【问题标题】:C# Adding dataobject to all service in an existing projectC#将数据对象添加到现有项目中的所有服务
【发布时间】:2020-07-19 18:21:13
【问题描述】:

我有一个 Asp.Net Core 3.1 现有项目,在 BusinessLayer 中有 50 到 60 个服务。现在业务规则已经改变,所以我需要检查每个服务特定逻辑的每个方法,以确保用户可以做某事。

为此,我需要获取一些数据对象,例如说

UserPermission userPermission

从 ControllerBase 到服务类。这个对象需要在ControllerBase中设置,并在每个Service Class方法中使用

如何在不对所有控制器或服务进行大量更改而不对方法签名进行任何更改的情况下做到这一点。

我确实查找了这篇文章(http://rion.io/2016/01/04/accessing-identity-info-using-dependency-injection-in-net-5/),它正在谈论类似的事情

如果没问题,我需要在没有任何接口的情况下使用解析器还是应该使用接口和实现

这是我目前正在做的和正在做的事情

添加了这样的两个方法的接口

public interface IService
    {
        UserPermission GetProperty();
        void SetProperty(UserPermission userPermission);
    }

在课堂上

 public class Service : IService
    {
        UserPermission _userPermission;
      
        public UserPermission GetUserPermission ()
        {
            return _userPermission;
        }

        public void SetUserPermission (UserPermission userPermission)
        {
            this._userPermission= userPermission;
        }
    }

在 StartUp.cs 中

 services.AddScoped<IService, Service>();

在每个控制器中,我注入 IService 并传递给 BaseController,在那里它使用 SetUserPermission() 方法设置 UserPermission IService 的值

在每个服务中我注入 IService 并使用 IService 的 GetUserPermission() 方法获取 UserPermission 的值

这可行,但我想验证此方法或找到更好的方法来完成此操作。

感谢您的宝贵时间

【问题讨论】:

  • 你的 UserPermission 是什么?如果你想在 BaseController 中获得它,只需像 Service 那样注入它。
  • 它只是一个具有 setter/getter 属性的类

标签: c# asp.net-core dependency-injection


【解决方案1】:

1.如果模型数据是动态的,你可以使用如下构造函数:

public class UserPermission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Role { get; set; }
    public UserPermission(int id,string name,string role)
    {
        Id = id;
        Name = name;
        Role = role;
    }
}

获取如下值:

public class HomeController : Controller
{
    private readonly UserPermission UserPermission = new UserPermission(1, "aaa", "asd");

    public IActionResult Index()
    {
        var model = this.UserPermission;
        return View();
    }
}

结果:

2.如果模型数据为常量,只需在模型中设置值即可:

public class UserPermission
{
    public int Id { get; set; } = 1;
    public string Name { get; set; } = "aa";
    public string Role { get; set; } = "bbb";  
}

您可以获得如下价值:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var model = new UserPermission();
        return View();
    }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多