2017-02-21 22 views
1

Я использую CastleWindsor с их функцией TypedFacility.Как заставить ошибку времени выполнения для отсутствующих аргументов в Castle Windsor TypedFactory

У меня есть группа из примерно 50 классов, которые основаны на абстрактном базовом классе. У каждого из них есть собственный интерфейс. Во время загрузки I Запишите конкретный класс в интерфейс.

Есть несколько интерфейсов в TypedFacility:

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

Базовый класс требует один аргумент в конструкторе (имя пользователя).

Я бы хотел показать ошибку времени выполнения, если кто-то пытается создать класс, требующий имя пользователя, с помощью Create вместо CreateService. В любом случае я могу это сделать?

+0

Вы уверены, что хотите «ошибка компиляции», когда «кто-то пытается создать класс"? Вы можете попробовать создать 2 TypedFactories за двумя интерфейсами и избежать этого. В противном случае вы можете сделать это внутри FactoryMethod. –

ответ

0

Вы можете попробовать так:

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

В селекторе вы имеете тип и аргументы:

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}"); 

     .... 
    } 
}