如何从默认的ASP.Net Mvc/Identity 2.0中拆分属性,功能和类?我正在与一些事情作斗争:
应用架构:
我有一个有几层的解决方案:
我的业务层只知道服务接口,而不是实现,我使用依赖注入来连接所有东西.
我有一些接口定义数据服务的读/写/工作单元操作,以及从DbContext(在我的服务层)继承的这些接口的实现.DbSet<MyPoco> MyPocos {get;set;}我通过传递一系列定义关系的类型配置,然后通过访问我的类型,而不是一系列的连接Set<Type>().一切都很好.
此堆栈已用于现有应用程序,并且运行良好.我知道它将转换到MVC应用程序,并且只有"开箱即用"ASP.Net Identity-2的问题.
我有一个Azure WebJob项目,我在我的开发机器上本地运行.它正在侦听Azure Service Bus消息队列.什么都没有像主题,只是最基本的消息队列.
它多次接收/处理相同的消息,在收到消息时立即启动两次,然后在处理消息时间歇性地启动.
问题:
我正在使用异步函数,简单的注入器和自定义JobActivator,因此我的函数签名是:而不是静态void方法:
public async Task ProcessQueueMessage([ServiceBusTrigger("AnyQueue")] MediaEncoderQueueItem message, TextWriter log) {...}
Run Code Online (Sandbox Code Playgroud)
在工作中,它正在移动blob服务上的一些文件,并从媒体服务调用(和等待)媒体编码器.因此,虽然Web作业本身没有进行大量处理,但是需要相当长的时间(对于某些文件,这需要15分钟).
该应用程序正在启动,当我向队列发布消息时,它会响应.但是,一旦收到消息,它就会多次收到消息:
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New ServiceBus message detected on 'MyQueue'.'
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New ServiceBus message detected on 'MyQueue'.'
Run Code Online (Sandbox Code Playgroud)
此外,当任务正在运行时(我看到媒体服务功能的输出),它将从队列中获得另一个"副本".
最后,在任务完成后,它仍然间歇性地处理相同的消息.
使用 Angular 和 ngrx,我想导航到路线并确保 ngrx/store 中提供所需的数据。我正在使用 ngrx/store action/effect/reducer 来物理调用 API。路由正在加载的组件通过存储访问数据,因为系统的其他部分可能会更新数据。
如果数据加载失败,则会调度 LOAD_FAILED 操作,可以通过多种方式处理该操作。
我应该使用守卫还是解析器?每种方法还有哪些其他优点和缺点?你尝试过什么,如果有机会再给你一次,你还会这样做吗?以下是我的一些想法。
当访问路由时,guard 的 canActivate 检查数据是否在 store 中,如果没有,则从 API 加载数据,并将其添加到 store 中。如果数据加载失败,canActivate 将返回 false(作为可观察值)。
这种方法的缺点是“加载数据不应该是警卫的责任”,但优点是如果无法加载数据,则可以阻止访问,并且路由器可以处理“未找到”的情况,两者都是都在职责范围内。
当访问该路线并且任何其他防护已允许激活时,解析器将被调用。该解析器检查数据是否在存储中,如果没有,则触发 LOAD 操作,以从 API 加载并添加到存储中。然后,一旦加载了数据,解析器就会返回一些任意数据,当组件使用存储时,这些数据会被路由/组件丢弃。如果数据加载失败,某些内容会重定向到未找到的页面
这种方法的缺点是解析器没有以传统的方式使用,例如它返回的数据被丢弃。此外,解析器在未找到时需要重定向到 404,或者 LOAD_FAILED 需要重定向。这增加了复杂性,因为有时 LOAD_FAILED 可能不应该重定向,例如当后台操作触发加载时。从好的方面来说,解析器负责加载数据。
我有绑定到 window.hashchange 的问题。调用 时history.replaceState,它会触发 'hashchange' 事件,除非调用了location.hash。我使用 Chrome 42 和 jQuery 来协助绑定。我已经加载了 Sammy.js(我实际上正在尝试弄清楚 Sammy 将如何解释该行为)
我正在控制台中调试,并执行以下操作:
$(window).bind('hashchange', function(e) { alert('# change' + location.hash); });
history.replaceState({}, "", "#2")-->显示警报
location.hash = "3" --> 显示警报
history.replaceState({}, "", "#4")-->不显示警报
这是一个错误,还是预期的行为?我会认为 replaceState 要么总是,要么从未触发 'hashchange' 事件
有没有办法将依赖项注入从EF Linq context.Entities.Select(x => new Y {...})投影返回的对象?(我使用的是Simple Injector,但概念仍然存在)
我试图实现的一些事情:(这只是输入,没有编译,抱歉任何语法错误/不完整)
// person MAY be an entity, but probably more likely a class to serve a purpose
public class Person {
public string Name
public DateTime DOB {get;set; }
// what I want to achieve: note, I don't want to have complex logic in my model, I want to pass this out to a Service to determine.. obviously this example is over simplified...
// this could be a method or a …Run Code Online (Sandbox Code Playgroud) c# linq entity-framework dependency-injection simple-injector
angular ×1
architecture ×1
asp.net-mvc ×1
azure ×1
c# ×1
html ×1
javascript ×1
linq ×1
ngrx ×1
ngrx-store ×1
pushstate ×1