Una forma es que RepositoryFactory implemente IRepositoryFactory, luego registre eso. Los tipos resueltos pueden obtener una fábrica y luego llamar a su método CreateAuthoringRepository. Puede crear una sobrecarga llamada CreateAuthoringRepositoryForCurrentIdentity si lo desea, o registrar una dependencia de IIdentity de la fábrica con Unity.
Probablemente solo inyecte una fábrica y abandone el método CreateAuthoringRepository como lo tiene, luego haga que los clientes pasen WindowsIdentity.GetCurrent(). De esa manera, la identidad siempre es fresca y puedes burlarte de la fábrica para probarla.
Alternativamente, puede especificar un delegado con InjectionFactory:
void Main()
{
using (var container = new UnityContainer())
{
container.RegisterType<IAuthoringRepository>(
new InjectionFactory(c => CreateAuthoringRepository()));
Console.WriteLine("debug - resolving model");
var model = container.Resolve<Model>();
}
}
public IAuthoringRepository CreateAuthoringRepository()
{
Console.WriteLine("debug - calling factory");
return new AuthoringRepository
{ Identity = WindowsIdentity.GetCurrent() };
}
public class Model
{
public Model(IAuthoringRepository repository)
{
Console.WriteLine(
"Constructing model with repository identity of "
+ repository.Identity);
}
}
public interface IAuthoringRepository
{
IIdentity Identity { get; }
}
public class AuthoringRepository : IAuthoringRepository
{
public IIdentity Identity { get; set; }
}
Esta impresora:
debug - resolving model
debug - calling factory
Constructing model with repository identity of System.Security.Principal.WindowsIdentity
Eso es para la Unidad 2.0. Con versiones anteriores, vea StaticFactoryExtension.
Gracias! funcionó como un encanto =) – burnt1ce
¡Perfecto! Esto también funciona para mí. –