Get a list of all registered objects implementing a certain interface

前端 未结 6 1887
失恋的感觉
失恋的感觉 2020-12-05 05:23

Consider the following

builder.Register(c => new A());
builder.Register(c => new B());
builder.Register(c => new C());

B

6条回答
  •  时光说笑
    2020-12-05 06:24

    Clarification for any one searching this with regards to Inherited Class

    Ex :

        public static IEnumerable GetTypesInherit(this Assembly assembly)
        {
            var types = assembly.GetTypes()
                .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(T)))
                .ToList();
    
            return types;
        }
    

    Installer :

        public static IContainer Install()
        {
            var builder = new ContainerBuilder();
            var executingAssembly = Assembly.GetExecutingAssembly();
    
            var testScreens = executingAssembly.GetTypesInherit();
            foreach (var testScreen in testScreens)
            {                   
                builder.RegisterType(testScreen).As();
            }
    
            var container = builder.Build();
            return container;
        }
    

    Usage (Implicit) :

      public class MainViewModel(IEnumerable testScreens) 
      {}
    

提交回复
热议问题