将静态方法与 IOC 数据访问结合使用

本文关键字:结合 访问 数据 静态方法 IOC | 更新日期: 2023-09-27 17:56:54

我有一个使用存储库模式的MVC项目。我也在IOC容器中使用Ninject。不过,我在项目加载时存储一些缓存值时遇到了问题。

在我的 Global.asax 中.cs我有:

...(some settings)
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
....
...CustomDataCache.Configure();

在我的控制器工厂中,我有我需要的绑定:

_ninjectKernal.Bind<IDataContext>().To<DataContext>()
            .WithConstructorArgument("appNamekey", "Name of Data Application")
            .WithConstructorArgument("serverLocationNameKey", "Location of Application Server");

在我的自定义缓存类中,我想做这样的事情:

private IDataContext _context;
private CustomDataCache(IDataContext context)
    {
        _context = context;
    }
public static void Configure(){
  System.Web.HttpContext.Current.Cache["NDECCategories"] = _context.GetNdecCategories();

我想从全局静态调用 Configure(),但是当我需要 DataContext 的实例时,我该怎么做?

谢谢

将静态方法与 IOC 数据访问结合使用

解析依赖关系各不相同。对于网络表单...

Public Class _Default
    Inherits Page
    <Dependency()>
    Public Property _userService As IUserService

对于 MVC

public UserController(IDataContextAsync context)

实际上,您不需要直接从 Web 应用程序访问数据上下文。您应该访问在构造函数中具有 IDataContextAsync 设置的服务...

Public Class UserService
    Inherits Service(Of User)
    Implements IUserService
    Private ReadOnly _repository As IRepositoryAsync(Of User)
    Public Sub New(repository As IRepositoryAsync(Of User))
        MyBase.New(repository)
        _repository = repository
    End Sub

为什么不在Configure方法中将类别作为参数传入?

var _context = DependencyResolver.Current.GetService<IDataContext>();
var categories = _context.GetNdecCategories();
CustomDataCache.Configure(categories);