为什么ExportLifetimeContext<T>存在?它是为了什么?为什么有必要在这个目标上调用Dispose?我真的需要打扰它吗?如果我不得不花时间思考资源管理,它感觉不到很好,对我来说感觉不太好.
这种处置是否与Value属性相关联?刚刚去的特定问题是CreateExport().Value什么?
当您要求ExportFactory创建新对象时,MEF实际上可能还会创建依赖项,以及这些依赖项的依赖项等.由于您要求单个对象,因此可能会创建许多对象.
其中一些额外的对象可能是IDisposable,并且容器负责在不再需要它们时处理它们.
要向容器发出使用您的对象的信号,请致电ExportLifetimeContext<T>.Dispose().然后,如果需要,MEF容器将负责处理请求的对象及其依赖项.如果你不这样做,MEF将永远保留对这些对象的引用,等待它可以处理它们的信号.
在Autofac 2中,存在非常类似的机制.而不是ExportFactory,他们使用Func<Owned<T>>,你需要打电话Owned<T>.Dispose()来清理.
ExportLifetimeContext.Dispose但我想这是类似的CompositionContainer.ReleaseExport.
ExportFactory它适用于您具有明确定义的生命周期的情况.如果不是这种情况(或者您知道永远不需要清理),那么您应该创建自己的工厂实现.当然,您有责任确保不会IDisposable创建任何内容,因为无法正确清理它.
以下是使用自定义工厂导入/导出的示例Func<T>.
[Export(typeof(ISomeInterface))]
public class SomeClass
{
private readonly Func<Foo> fooFactory;
[ImportingConstructor]
public SomeClass(Func<Foo> fooFactory)
{
this.fooFactory = fooFactory;
}
public void DoStuff()
{
Foo newFoo = fooFactory();
...
}
}
public class FooFactory
{
[Export(typeof(Func<Foo>))]
public void CreateFoo()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |