Search code examples
dryioc

Registering a class with ioc with constructor with param (concrete class no interface)


I have looked at the dryIoc documentation and for whatever the reason.

I cannot find a way to register a singleton with constructor with parameter

I have the following

    public class MainActivity //no interface
    {
        //etc... omitted for brevity
    }


    public class SampleClass : ISampleClass
    {
        private readonly Activity mainActivity;

        public SampleClass(Activity mainActivity)
        {
            this.mainActivity = mainActivity;
        }
    }

    public interface ISampleClass
    {
        //etc... omitted for brevity
    }

//registration

//usually when I have a constructor with no params I do as follows:

 container.Register<ISampleClass,SampleClass>(Reuse.Singleton);

 container.Register<ISampleClass,SampleClass>(Reuse.Singleton);
 container.UseInstance(mainActivity);

question How do I register the above when SampleClass takes a param as a constructor?

I tried as follows but does not compile

    container.Register<ISampleClass>(Made.Of(() => new SampleClass(mainActivity));
    container.Register<SampleClass>(made: Parameters.Of.Type<MainActivity>(Reuse.Singleton));

Solution

  • container.RegisterDelegate<ISampleClass>(
        _ => new SampleClass(mainActivity),
        Reuse.Singleton);
    

    or

    container.Register<ISampleClass, SampleClass>(
        Reuse.Singleton,
        made: Parameters.Of.Type<Activity>(_ => mainActivity));