Использование Castle Windsor для DI, у меня есть два класса, которые реализуют один и тот же интерфейс; и, кроме того, имеют некоторые методы и свои свойства. Я использую Castle DynamicProxy и создаю Interceptor, который будет делать некоторые записи с Log4Net через Castle.Facilities.LoggingLoggingFacility.Замок Виндзорский перехватчик без интерфейса?
Файл журнала аккуратно регистрирует для каждого метода, который реализован через интерфейс, когда этот метод вызывается. В примере кода ниже метод Foo() регистрируется при вызове, но метод LogMeToo() не работает, поскольку он не является частью реализации IFoo.
Я хочу, чтобы и другие методы, которые не реализуют интерфейс, регистрируются при вызове. Возможно ли это, и если да: как?
public interface IFoo
{
void Bar();
}
[Interceptor(typeof(LoggingInterceptor))]
public class Foo : IFoo
{
public void Bar()
{
// Do Something
}
public void LogMeToo()
{
// Do Something
}
}
public static class Program
{
[STAThread]
public static void Start()
{
var container = new WindsorContainer();
container.Register(Component.For<LoggingInterceptor
>().LifeStyle.Transient);
container.Register(Component.For<IFoo
>().ImplementedBy<Foo
>());
container.AddFacility<LoggingFacility
>(f => f.LogUsing(LoggerImplementation.Log4net).WithConfig("Log4net.config"));
}
}
WPF C# 4.0
Спасибо за ваш ответ. Можете ли вы указать мне документацию о том, как сделать методы виртуальными и разоблачить класс как услугу? Что касается сломанной абстракции: в моем реальном коде Bar() запускает LogMeToo() в новом фоновом потоке, и я хочу перехватить, когда это произойдет. – KBoek