2016-03-28 5 views
0

Я хочу сделать что-то вроде:Как указать дочернюю область для параметра фабрики func 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 без прохождения локатор везде?

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^