Répondre

1

Vous pouvez créer une stratégie de constructeur personnalisé et vérifier si le type est enregistré dans le contenant:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new UnityContainer(); 
     container.AddNewExtension<FactoryUnityExtension>(); 

     try 
     { 
      container.Resolve<Program>(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

     container.RegisterType<Program>(); 

     var v = container.Resolve<Program>(); 
     Console.WriteLine(v); 
    } 
} 


public class CustomFactoryBuildStrategy : BuilderStrategy 
{ 
    private ExtensionContext baseContext; 

    public CustomFactoryBuildStrategy(ExtensionContext baseContext) 
    { 
     this.baseContext = baseContext; 
    } 

    public override void PreBuildUp(IBuilderContext context) 
    { 
     var key = (NamedTypeBuildKey)context.OriginalBuildKey; 

     if (baseContext.Container.Registrations.All(o => o.RegisteredType != key.Type)) 
     { 
      throw new InvalidOperationException(); 
     } 
    } 
} 

public class FactoryUnityExtension : UnityContainerExtension 
{ 
    private CustomFactoryBuildStrategy strategy; 
    protected override void Initialize() 
    { 
     this.strategy = new CustomFactoryBuildStrategy(Context); 
     Context.Strategies.Add(strategy, UnityBuildStage.PreCreation); 
    } 
} 
+0

@ArturShamsutdinov avez-vous essayé cette solution? – Backs