RegisterFactory with Interceptors
Opened this issue · 6 comments
Hi,
Since the InjectionFactory is deprecated, I am trying to use the RegisterFactory method.
I have registrations which use a factory and also have interceptor(s):
Func<IUnityContainer, object> factoryFunc = c => new FileSystemWithWaitAndRetry(
new FileSystemService(container.Resolve<System.IO.Abstractions.IFileSystem>()),
container.Resolve<ILogger>());
container.RegisterType<IFileSystemService>(
createLifetimeManager(),
new InjectionFactory(factoryFunc),
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior(new ImpersonationBehavior(sSettings.ImpersonatorDomain, sSettings.ImpersonatorUsername, sSettings.ImpersonatorPassword, container.Resolve<ILogger>())));
(This is a service for filesystem access with a 'wait and retry' decorator. Interception adds impersonation)
How can the RegisterType be rewritten to RegisterFactory and still pass the InterceptionBehaviour?
Is the RegisterFactory method missing some functionality?
Thanks!
@ArnaudB88
This can be done with RegisterFactory, but you need to set up the interception proxy as part of your "factoryFunc", which is a bit messy
container.RegisterFactory<IFileSystemService>(c =>
Intercept.ThroughProxy(
new FileSystemWithWaitAndRetry(
new FileSystemService(container.Resolve<System.IO.Abstractions.IFileSystem>()),
container.Resolve<ILogger>()),
new InterfaceInterceptor(),
new[]
{ new ImpersonationBehavior(
sSettings.ImpersonatorDomain, sSettings.ImpersonatorUsername,
sSettings.ImpersonatorPassword, container.Resolve<ILogger>())
}));
I am open to suggestions on how to make it more elegant.
I'll try and put together a pull request on the weekend
Is there any about this issue?
Is there an elegant way to RegisterFactory and still pass the InterceptionBehaviour?
I'm working with unity.container, abstractions and interception 5.11.1
Is there a way to do this in 5.11.1:
unityContainer.RegisterType<TestRepository>( new InjectionFactory(container => new TestRepository()), new Interceptor<VirtualMethodInterceptor>(), new InterceptionBehavior<PolicyInjectionBehavior>());