2016-03-28 22 views
0

Ich mag wie etwas tun:Wie wird ein untergeordneter Bereich für Konstruktor func factory Parameter angegeben?

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

So, dass jeder Anruf LoadOther sollte eine neue OtherClass Instanz mit einem eigenen Bereich erstellen (in einem übergeordneten Bereich, in der MyClass gebaut wurde). Aber es gibt kein [WithChildScope] Attribut.

In NInject würde ich DefinesNamedScope mit ContextPreservation verwenden.

Kann ich es in AutoFac tun, ohne Locator überall zu passieren?

Antwort

0

So fand ich die Lösung selbst:

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