我创建了一个由两个主要组件组成的小应用程序,我使用 vue 路由器在组件之间进行路由。
第一个组件称为 MoviesList,第二个组件称为 Movie。我已将它们注册到routes js 文件中。
const routes = [
{
path: '/',
name: 'Home',
component: MoviesList
},
{
path: '/:movieId',
name: 'Movie',
component: Movie
}
]
Run Code Online (Sandbox Code Playgroud)
我的 App.vue 模板如下所示
<template>
<router-view></router-view>
</template>
Run Code Online (Sandbox Code Playgroud)
如何使 MovieList 组件缓存起来,或者说它是用<keep-alive>标签包裹的?期望的结果是缓存 MovieList 组件,而不缓存 Movie 组件。
我想这样做,因为 MovieList 组件有一个在 Mounted() 钩子上运行的方法,每当我切换路由并返回时,该方法都会再次运行,因为组件被重新渲染。
我正在重构一个应用程序以反转一些依赖项。部分原始代码用于DbContext.Set<MyEntityType>()获取要查询的集合。
通过反转,使用 的代码不再明确知道 MyEntityType DbContext.Set<MyEntityType>(),所以现在我DbContext.Set(TypeVariable)改为使用。
重构在返回正确 DbSet 的范围内起作用。
但是,类型DbContext.Set(TypeVariable).Local是IList(包含类型未知) where-as 的类型DbContext.Set<MyEntityType>().Local是ObservableCollection<MyEntityType>。这意味着现在不可能对 DbSet 执行 Linq。
我能够实现的最佳解决方法是强制转换为 MyEntityType 和其他实体类型实现的接口(为了清楚起见,省略了一些代码)
var set = Context.Set(targetType);
var entity = set.Local.OfType<IActionTarget>()
.FirstOrDefault(l => l.Id == key.Id && l.EffectiveDate == key.EffectiveDate);
var querables = set as IQueryable<IActionTarget>;
entity = querables.FirstOrDefault(e => e.Id == key.Id && e.EffectiveDate == key.EffectiveDate);
Run Code Online (Sandbox Code Playgroud)
所以,两个问题:
为什么不DbContext.Set(TypeVariable)返回强类型集?
有没有更好的方法来进行依赖倒置?
应要求提供更多详细信息
这都是关于依赖的。模型包含通过 EF Code First 以典型方式(但通过Repository)持久化的 POCO 类。一个ActionEvaluator …