我有一个Parent
类和一个Child
类,
父母对孩子做了一些处理,然后将其处置。
class Parent
{
private IChild _child;
Parent(IChild child) { this._child=child }
DoAndDisposeChild()
{
//code
//this._child.dispose();
}
}
使用
autofac
,我正在解析Parent
并使用以下方法调用DoAndDisposeChild
方法:container.Resolve<Parent>().DoAndDisposeChild().
通过使用
Owend
的autofac
功能,我已经成功实现了这一点:private Owned<IChild> _child;
并将
DoAndDisposeChild
修改为:DoAndDisposeChild()
{
//code
this._child.Dispose();
}
问题是我将代码耦合到
autofac
,正在寻找不使用autofac
来实现处置问题的方法? 最佳答案
为了使业务逻辑与Autofac脱钩,需要将子类注册为在复合根级别具有external ownership。在这种情况下,Autofac不必担心处置任何Child实例:
builder
.RegisterType<Child>()
.As<IChild>
.ExternallyOwned();
传递给构造函数IChild:
class Parent
{
private IChild _child;
public Parent(IChild child) { this._child=child }
// ..
}
作为一种替代方法,可以将子实例的创建收取到单独的服务(例如Factory或something else)中:
class Parent
{
private IChild _child;
public Parent(IChildFactory childFactory) { this._child = childFactory.CreateChild(); }
}
关于c# - 在IoC容器中处理注入(inject)的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55955507/