- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的配置是 MVC5 C# 应用程序,使用 AutoFac。
我们有许多单例,如果它们在第一个请求时被初始化,会给用户带来糟糕的体验,因为它们的初始化总共需要大约 3-4 秒。我们正在使用 AutoFac 进行依赖注入(inject),我想知道是否有任何方法可以确保单例(或这些特定的单例)构建在 App_Start 上,这样我们就不会在用户发送第一个请求时浪费时间?如果不是,解决此问题的最佳方法是什么?
最佳答案
此类问题的一般解决方案是在代理实现后隐藏此类重量级对象。通过这种方式,您可以在应用程序启动时直接触发初始化过程,而操作在后台运行而不会阻止请求(除非他们在请求期间需要未初始化的数据)。
如果您的代码如下所示:
// The abstraction in question
public interface IMyService
{
ServiceData GetData();
}
// The heavy implementation
public class HeavyInitializationService : IMyServic {
public HeavyInitializationService() {
// Load data here
Thread.Sleep(3000);
}
public ServiceData GetData() => ...
}
可以按如下方式创建代理:
public class LazyMyServiceProxy : IMyService {
private readonly Lazy<IMyService> lazyService;
public LazyMyServiceProxy(Lazy<IMyService> lazyService) {
this.lazyService = lazyService;
}
public ServiceData GetData() => this.lazyService.Value.GetData();
}
您可以按如下方式使用此代理:
Lazy<IMyService> lazyService = new Lazy<IMyService>(() =>
new HeavyInitializationService());
container.Register<IMyService>(c => new LazyMyServiceProxy(lazyService))
.SingleInstance();
// Trigger the creation of the heavy data on a background thread:
Task.Factory.StartNew(() => {
// Triggers the creation of HeavyInitializationService on background thread.
var v = lazyService.Value;
});
关于c# - AutoFac - 在 app_start 上初始化重量级单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42438452/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!