Skip to content

RegisterFactory with Interceptors #33

Description

@ArnaudB88

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!

Activity

  1. ENikS commented on Apr 29, 2019

    @ENikS
    Contributor
  2. velsietis commented on Aug 7, 2019

    @velsietis

    @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>())
            }));
    
  3. ENikS commented on Aug 12, 2019

    @ENikS
    Contributor

    I am open to suggestions on how to make it more elegant.

  4. ENikS commented on Aug 13, 2019

    @ENikS
    Contributor
  5. gplutov commented on Mar 4, 2020

    @gplutov

    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>());

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions