Как зарегистрировать впрыск перехвата для интерфейсов, которые наследуют интерфейс маркера?

StackOverflow https://stackoverflow.com//questions/11672325

Вопрос

Например, я хотел бы назвать следующий код, чтобы зарегистрировать весь набор услуг, которые я хочу ввести политику для:

container
            .AddNewExtensionIfNotPresent<Interception>().Configure<Interception>().SetDefaultInterceptorFor<IBusinessService>(new InterfaceInterceptor());
.

Где:

ISomeServiceA  : IBusinessService
ISomeServiceB : IBusinessService etc 
.

Я думаю, что я читал, что вы не могут получить от isomeservcex для amarkeriNterface где-то .... Может ли это подтвердить.

Это было полезно?

Решение

Короче, посмотрите на загруженные сборки (добавьте дополнительную фильтрацию, если требуется - нет кэширования, если это сделано на Bootstrap) Добавление перехватчиков по умолчанию для типов, реализующих указанный маркер интерфейс.

        container.AddNewExtensionIfNotPresent<Interception>();
        Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (Assembly assembly in assemblies)
        {
            Type[] types = assembly.GetTypes().Where(x => x.IsClass && typeof(T).IsAssignableFrom(x) && x.GetType() != typeof(T)).ToArray();
            foreach (Type t in types)
            {
                container.Configure<Interception>().SetDefaultInterceptorFor(t, new VirtualMethodInterceptor());
            }
        }
.

Редактировать:

Приведенное выше может быть сделано с использованием беглых API и означает, что у нас нет Naiive зависимостей на appdomain.currentdomain.gessemblies () (которые не содержат фильтрации, применяемую в Config apply api

.Include(If.Implements<IBusinessService>, (x, y) =>
                                                          {
                                                              if (x.IsClass)
                                                                  y.Configure<Interception>().
                                                                      SetDefaultInterceptorFor(x,
                                                                                               new VirtualMethodInterceptor
                                                                                                   ());
                                                          })
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top