我有一项依赖于其他服务的服务,例如
toBeDefined
这是一个直接依赖,所以在构造函数中使用它很好。 还有一些其他方法需要其他服务,所以我一直用属性处理这些,例如,我可能需要 Stock 来获取订单< /强>:
var kendoVariable = {
observable: function(mdl) {
return "mdl";
},
bind: function() {
console.log("binded");
}
};
var ComponentsModule = (function(kendo) {
var addLieferbilanzkreisModalComponent = null;
return {
getAddLieferbilanzkreisModalComponent: function() {
return addLieferbilanzkreisModalComponent;
},
registerAddLieferbilanzkreisModalComponent: function(component) {
addLieferbilanzkreisModalComponent = component;
kendo.bind(component.modal, kendo.observable(component.viewModel));
}
};
})(kendoVariable);
describe("Components", function() {
describe("ComponentsModule: ", function() {
it("Should register AddLieferbilanzkreisModalComponent", function() {
// Arrange
var module = ComponentsModule; // undefined
// Act
module.registerAddLieferbilanzkreisModalComponent({
modal: "some modal",
viewModel: "some view model"
});
// Assert
expect(module.getAddLieferbilanzkreisModalComponent()).toBeDefined();
});
});
});
正如您所看到的,在我以前的做事方式中,属性仅在被请求时被实例化。 现在我已经转移到autofac我想设置一个类似的方法,即如果请求只针对订单,那么只有 OrderProvider 和 OrderService < / strong>将被实例化,但如果他们请求 Stock ,那么所有3将被实例化。 我真的希望这是有道理的。
答案 0 :(得分:1)
Autofac允许您为需要延迟实例化的场景请求Lazy<T>
关闭所需类型的Lazy<T>
。第一次访问private Lazy<IStockService> _lazyStockService;
public IStockService StockService
{
get { return _lazyStockService.Value; }
}
public OrderProvider( IOrderService service, Lazy<IStockService> lazyStockService )
{
_service = service;
_lazyStockService = lazyStockService;
}
的值是在何时创建实际实例。
Lazy<T>
Here's a link to Autofac's docs on this topic
details.length
的