【问题标题】:Looking for equivalent Windsor Castle's features in Autofac在 Autofac 中寻找等效的温莎城堡功能
【发布时间】:2011-03-25 18:08:11
【问题描述】:

过去 3 年我一直是温莎城堡 IoC 容器;我正在尝试使用 Autofac 进行概念验证,但无法在 Autofac 中找到等效的温莎城堡功能。

• 在 Windsor Castle 的 IWinsorContainer API 中,有一个 Release 方法允许立即释放组件实例。 Autofac容器中是否有等效方法?

• 温莎城堡有“共享”生活方式的概念,请参阅下面的链接。 Autofac中是否有等价物? http://www.castleproject.org/container/documentation/trunk/manual/coretypedocs/Generated_PooledAttribute.html

• Windsor Castle 的 DynamicProxy 提供了一种方法拦截。我找到了下面的链接并按照 Nicholas 的说明进行操作,但在 AutofacContrib.DynamicProxy2 或他提到的源代码中找不到 IInterceptor 接口。 http://nblumhardt.com/archives/aop-with-autofac-and-dynamicproxy2/

如果您能提供任何信息,我将不胜感激!

【问题讨论】:

    标签: autofac


    【解决方案1】:

    Autofac 中没有明确的 Release。 Autofac 中的组件生命周期由生命周期范围管理。最接近显式释放对象的方法是利用生命周期范围内固有的the IDisposable support

    假设您有一个实现 IDisposable 的类并注册它:

    var builder = new ContainerBuilder();
    builder.RegisterType<SomeComponent>().As<IMyDependency>().InstancePerLifetimeScope();
    var container = builder.Build();
    

    如果你创建了一个生命周期范围来解析组件,那么当生命周期范围被释放时,你的组件也会被释放:

    using(var lifetime = container.BeginLifetimeScope())
    {
      var myThing = lifetime.Resolve<IMyDependency>();
      // myThing.Dispose() gets called at the end of the using
    }
    

    或者,您可以查看owned instances,您可以在其中控制何时调用 IDisposable.Dispose()。

    Autofac 中没有与 Pooled 生命周期相当的功能。您可以选择...

    • 每个依赖项:每次解析组件时创建一个新实例。
    • 每个生命周期范围:为每个拥有的生命周期范围创建一次新实例(就像您在上面的示例中看到的那样)。
    • 单一实例:只需创建一个。

    有一篇关于 the lifetime scopes available here 的 wiki 文章。

    您可能可以进行一些自定义编码以使池工作,包括创建自定义 IComponentLifetime 实现和对 IRegistrationBuilder 的扩展,这样您就可以执行类似...

    builder.RegisterType<Foo>().As<IFoo>().PooledLifetime(32);
    

    ...但我认为这不会是一两行的事情。如果您最终创建了它,请考虑回馈 AutofacContrib。

    IInterceptor 接口在 Castle.Core.dll 中 - Castle.DynamicProxy.IInterceptor - 不在 AutofacContrib.DynamicProxy2 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多