我目前正在使用Breeze.js(版本1.4.1)以及HotTowel模板,一切都运行得非常好.
但是,我想知道是否有一种方法可以在发送的请求中包含breeze,以使元数据成为可配置的后缀,例如?v=1.0.0.1,与我目前require.js在版本更改期间破坏本地缓存的方式类似.
这将提供让用户在本地缓存元数据并避免对相同的未更改元数据的不必要请求的好处.甚至还有服务器端缓存,并尽可能避免元数据生成.
对于实际的WebApi缓存,我目前正在使用WebApi.OutputCache,以便与之相配.
我发现了一些与我面临的问题相似的问题和回答; 但我还没能把一个有效的解决方案拼凑起来.
我有以下内容:
public interface IProcessing<V,W> where W: TaskResponse where V: TaskRequest
{
W process(V req);
}
Run Code Online (Sandbox Code Playgroud)
where TaskRequest&TaskResponse 是抽象基类
这个具体类也定义了:
public class MathProcessor : IProcessing<MathRequest, MathResponse>
{
public MathResponse process(MathRequest req) {
// do stuff
// create a MathResponse instance
return resp;
}
}
Run Code Online (Sandbox Code Playgroud)
where MathRequest&MathResponse是派生类,各个抽象类用作接口定义中的约束.
根据其界面注册具体类型并使用autofac解析是可以的.
但是,在运行时基于另一种类型(在这种情况下是请求对象MathRequest)尝试解析具体类型的预期用法产生了困难.这基本上是为了实现常见的消息处理程序模式(伪代码跟随),其中接收消息并将其分派给适当的处理程序:
TaskRequest req = getNextRequest();
var proc = container.Resolve(req.getType().Name)
proc.process(req);
Run Code Online (Sandbox Code Playgroud)
基于论坛中的相关主题,基本建议是定义工厂并将其注册到容器,然后在运行时使用工厂根据提供的参数创建我需要的对象.这似乎是正确的.
我也看到了相关的建议,即使用IIndex<K,V>autofac中的功能按键查找相应的类型/服务.
我在注册时遇到问题MathProcessor,并且按键是类型解析类型(在这种情况下MathRequest).该错误可能与通用接口定义和允许的内容更相关.
注册:
builder.RegisterType<MathProcessor>().As<IProcessing<MathRequest, MathResponse>>().Keyed<IProcessing<MathRequest, MathResponse>>(strTypeName);
Run Code Online (Sandbox Code Playgroud)
没关系,但是
builder.RegisterType<MathProcessor>().As<IProcessing<TaskRequest, …Run Code Online (Sandbox Code Playgroud) 据我了解,数组的元素连续存储在内存中,访问特定数组是通过将所需索引和每个元素的大小的乘积与基数组地址相加来找到该元素的地址来完成的。
由于在像 C# 这样的语言中,我可以创建一个 s 数组object[]并在其中放入我想要的任何数据类型,如果我使用不同大小的类型同时仍然允许随机,那么数组的每个元素如何以统一的长度存储(并保持)使用权?