1

J'utilise CastleWindsor avec leur fonction TypedFacility.Comment forcer l'erreur d'exécution pour les arguments manquants dans Castle Windsor TypedFactory

J'ai un groupe d'environ 50 classes qui dérivent d'une classe de base abstraite. Ils ont chacun leur propre interface. Au moment du chargement, j'enregistre la classe concrète dans l'interface.

Il y a quelques interfaces dans le TypedFacility:

  1. T CreateService<T>(string username)
  2. T Create<T>

La classe de base nécessite un argument dans le constructeur (nom d'utilisateur).

Je voudrais montrer une erreur d'exécution si quelqu'un essaye de créer une classe qui exige un nom d'utilisateur, avec le Create au lieu de CreateService. Y at-il de toute façon que je peux le faire?

+0

Êtes-vous sûr de vouloir « erreur de compilation » lorsque « quelqu'un essaie de créer une classe"? Vous pouvez essayer de créer 2 TypedFactories derrière deux interfaces et éviter cela. Sinon, vous pouvez le faire dans FactoryMethod. –

Répondre

0

Vous pouvez l'essayer comme ça:

Component.For<ITypedFactoryComponentSelector>().ImplementedBy<MyServicesTypedFactorySelector>(), 

Dans le sélecteur vous avez le type et les arguments:

public class MyServicesTypedFactorySelector : ITypedFactoryComponentSelector 
{ 
    public Func<IKernelInternal, IReleasePolicy, object> SelectComponent(MethodInfo method, Type type, object[] arguments) 
    { 
     string username = arguments.Length > 0 ? (string)arguments[0] : null; 
     var parameterlessConstructor = theType.GetConstructor(Type.EmptyTypes); 
     //if there is no parameterless ctor and string.IsNullOrEmpty(username) 
     // throw InvalidOperationException($"no username provided for {type.GetName().Name}"); 

     .... 
    } 
}