我想做类似的事情:
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中执行此操作而无需在任何地方传递定位器吗?
答案 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;
}
}