Я пытаюсь настроить приложение так, чтобы типы из AssemblyA могли использоваться моей консолью для регистрации в стиле AOP.JournalInterceptor будет просто записывать вызовы методов, вводить и, возможно, выводить аргументы в файл журнала или хранилище данных какого-либо рода.
Я могу зарегистрировать один тип за один раз, но я бы хотел зарегистрировать все типы за один раз.Как только я начинаю, я могу добавить некоторую фильтрацию к зарегистрированным типам, но мне чего-то не хватает.
Я пытаюсь использовать Classes.FromAssemblyContaining
, но не уверен, как получить экземпляр IRegistration
для вызоваWindsorContainer::Register
Есть какие-нибудь подсказки?
// otherAssembly.cs
namespace assemblyA
{
public class Foo1 { public virtual void What(){} }
public class Foo2 { public virtual void Where(){} }
}
// program.cs
namespace console
{
using assemblyA;
public class JournalInterceptor : IInterceptor {}
public class Program
{
public static void Main()
{
var container = new Castle.Windsor.WindsorContainer()
.Register(
Component.For<JournalInterceptor>().LifeStyle.Transient,
// works but can't be the best way
Component.For<Foo1>().LifeStyle.Transient
.Interceptors<JournalInterceptor>(),
Component.For<Foo2>().LifeStyle.Transient,
.Interceptors<JournalInterceptor>(),
// how do I do it this way
Classes.FromAssemblyContaining<Foo1>()
.Pick()
.LifestyleTransient()
.Interceptors<JournalInterceptor>()
);
Foo1 foo = container.Resolve<Foo1>();
}
}
}