如何为构造函数 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 中,我会使用 DefinesNamedScope
和 ContextPreservation。
我可以在 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;
}
}
我想做类似的事情:
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 中做到这一点而无需到处传递 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;
}
}