1
A
回答
5
解決在簡單的注射器情況下是極快的,和不應該是一個問題,除非your constructors do too much。
儘管如此,添加跟蹤是微不足道的,可以如下(爲V2.8及以上)完成:
container.Options.RegisterResolveInterceptor((context, producer) => {
var watch = Stopwatch.StartNew();
try {
return producer();
} finally {
watch.Stop();
if (watch.ElapsedMilliseconds > 50) {
Console.WriteLine(
"Resolving {0} took {1} ms. Object graph: {2}",
context.Producer.ServiceType.Name,
watch.ElapsedMilliseconds,
context.Producer.VisualizeObjectGraph());
}
}
},
// Apply to every registration
context => true);
的RegisterResolveInterceptor
方法允許你攔截對GetInstance
和GetAllInstances
直接調用。所以註冊的委託將被應用到最外層的對象上,而不是它的依賴關係上。
如果您需要更細粒度的信息,例如所花費的時間來創建一個特定的依賴,你可以連接到ExpressionBuilt
事件如下:
container.ExpressionBuilt += (s, e) =>
{
MethodInfo monitorMethod =
this.GetType().GetMethod("Monitor").MakeGenericMethod(e.RegisteredServiceType);
Delegate producer = Expression.Lambda(
typeof(Func<>).MakeGenericType(e.RegisteredServiceType), e.Expression)
.Compile();
e.Expression = Expression.Call(monitorMethod, Expression.Constant(producer));
};
// Method somewhere else in the same class
public static T Monitor<T>(Func<T> producer) {
var watch = Stopwatch.StartNew();
try {
T instance = producer();
return instance;
} finally {
watch.Stop();
if (watch.ElapsedMilliseconds > 50) { ... }
}
}
相關問題
- 1. MassTransit和簡單噴油器
- 2. 簡單的噴油器插件
- 3. 簡單的噴油器和SolrNet
- 4. 用簡單的噴油器替換Ninject
- 5. 遷移Ninject - >簡單的噴油器
- 6. 簡單的噴油器 - 自定義WebViewPage
- 7. 簡單的噴油器註冊IMappingEngine(AutoMapper)
- 8. 簡單的噴油器 - 註冊集合
- 9. 反射式噴油器和噴油器之間的差異
- 10. 在運行時簡單的噴油器更改註冊
- 11. 簡單噴油器:在運行時替換註冊類型
- 12. 簡易噴油器工廠設施
- 13. 非通用接口的簡單噴油器裝飾器
- 14. 簡單的噴油器 - 將構造參數傳遞給容器
- 15. 簡單的噴油器和默認的AccountContoller依賴項問題
- 16. 配置Identity Framework的ApplicationUserManager在簡單的噴油器
- 17. 簡單的噴油器,功能沒有被攔截?
- 18. 使用簡單的噴油器註冊ISolrAbstractResponseParser <>
- 19. 帶簡單噴油器的插件架構
- 20. 使用簡單的噴油器與基類
- 21. 簡單的噴油器回退到Xamarin窗體DependencyService
- 22. 通用接口和簡單噴油器的依賴注入
- 23. 註冊IUserStore用簡單的噴油器3.1.2
- 24. 簡單的噴油器通過硬編碼值到構造
- 25. 簡單的噴油器 - Windows窗體示例破損
- 26. 簡單的噴油器參數附加到工廠
- 27. 簡單的噴油器註冊調用getInstance方法
- 28. 簡單的噴油器與異步形式工廠
- 29. 簡單的噴油器註冊和執行內部CommandHandler
- 30. 從溫莎遷移到簡單的噴油器,HttpContext.Current.Session爲空