如何为构造函数 func 工厂参数指定子作用域?

How to specify a child scope for constructor func factory parameter?

我想做类似的事情:

class MyClass
{
    Func<OtherClass> _factory;
    public MyClass([WithChildScope("OtherClassScope")] Func<OtherClass> other)
    {
        _factory = other;
    }

    public OtherClass LoadOther(int id)
    {
        var entity = DbHelper.LoadEntity(id);
        var other = _factory();
        other.Configure(entity);
        return other;
    }
}

这样每次调用 LoadOther 都应该创建一个新的 OtherClass 实例,它有自己的范围(在构造 MyClass 的父范围内)。但是没有[WithChildScope]属性。

在 NInject 中,我会使用 DefinesNamedScopeContextPreservation

我可以在 AutoFac 中做到这一点而无需到处传递 locator 吗?

所以我自己找到了解决方案:

k.RegisterType<Scoped<UserScope>>().AsSelf().WithParameter("childTag", "User");

public class Scoped<T>
{
    public Scoped(ILifetimeScope scope, object childTag)
    {
        Value = scope.BeginLifetimeScope(childTag).Resolve<T>();
    }

    public T Value { get; }
}

public class UserRepository
{
    Func<Scoped<UserScope>> _factory;

    public UserRepository(Func<Scoped<UserScope>> factory)
    {
        _factory = factory;
    }
}