我有一个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().


通过使用Owendautofac功能,我已经成功实现了这一点:

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/

10-13 07:32