如何为构造函数func factory参数指定子范围?

时间:2016-03-28 14:37:25

标签: c# scope autofac lifetime object-lifetime

我想做类似的事情:

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中,我会将DefinesNamedScope ContextPreservation 一起使用。

我可以在AutoFac中执行此操作而无需在任何地方传递定位器吗?

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}