Resolving classes without registering them using Castle Windsor

后端 未结 3 779
温柔的废话
温柔的废话 2020-12-01 16:13

Take the following useless program:

class Program
{
    static void Main(string[] args)
    {
        IUnityContainer unityContainer = new UnityContainer();
         


        
3条回答
  •  一个人的身影
    2020-12-01 16:51

    Windsor doesn't support that out of the box, but you can create extension methods to do this:

    static class WindsorExtensions
    {
        public static object ResolveType(this IWindsorContainer container, Type type)
        {
            if ( type.IsClass && !container.Kernel.HasComponent(type) )
                container.Kernel.AddComponent(type.FullName, type, LifestyleType.Transient);
            return container.Resolve(type);
         }
    
         public static T ResolveType(this IWindsorContainer container)
         { return (T)ResolveType(container, typeof(T)); }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer unityContainer = new UnityContainer();
            IWindsorContainer windsorContainer = new WindsorContainer();
    
            Program unityProgram = unityContainer.Resolve();
            Program castleProgram = windsorContainer.ResolveType();
        }
    }
    

提交回复
热议问题