根据要求提供Autofac属性

时间:2016-11-30 15:53:11

标签: c# autofac

我有一项依赖于其他服务的服务,例如

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将被实例化。 我真的希望这是有道理的。

1 个答案:

答案 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

Here's a link to the docs