小编Jua*_*ala的帖子

AOP与温莎城堡

我想要实现的是使用Castle Windsor拦截器的AOP属性.我已经取得了一些成功,但在课堂级别与方法级别方面遇到了问题.

  • 如果我只使用类级别属性,则会截获所有方法.
  • 如果我只使用方法级属性,那么这些方法将被截获.
  • 如果我添加了一个类级别属性和一个方法级别属性,那么两个拦截都将发生在被归属的方法上,但那些不会被拦截的方法.

所以鉴于此组件:

public interface IMyComponent
{
    void ShouldBeInterceptedByStopWatch_AND_ExceptionLogger();
    void ShouldBeInterceptedByExceptionLogger();
}

[LogExceptionAspect]
public class MyComponent : IMyComponent
{
    [StopwatchAspect]
    public void ShouldBeInterceptedByStopWatch_AND_ExceptionLogger()
    {
        for (var i = 0; i < 2; i++) Thread.Sleep(1000);
    }

    public void ShouldBeInterceptedByExceptionLogger()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望记录器方面可以拦截ShouldBeInterceptedByExceptionLogger()但不会发生,除非我从其他方法中删除秒表方面,或从类中删除记录器方面并将其添加到ShouldBeInterceptedByExceptionLogger().但两者ShouldBeInterceptedByStopWatch_AND_ExceptionLogger()都截获了.

整个示例应用程序可以在 - https://bitbucket.org/jayala/juggernet-aop找到

基本上它正在做的是使用一个工具来注册一个IContributeComponentModelConstruction拦截器,如果它在类级别找到一个方面,或者如果它在方法级别找到方面,则添加一个拦截器+方法钩子.

这是我引导容器的方式:

        var container = new WindsorContainer()
            .AddFacility<LogExceptionAspectFacility>()
            .AddFacility<StopwatchAspectFacility>()
            .Register(Component
                .For<IMyComponent>()
                .ImplementedBy<MyComponent>()
                .LifeStyle.Transient);
Run Code Online (Sandbox Code Playgroud)

设施正在做的是注册这样的拦截器和模型贡献者

public abstract class BaseAspectFacility<TAspectAttribute, TAspectInterceptor> : …
Run Code Online (Sandbox Code Playgroud)

aop castle-windsor castle-dynamicproxy windsor-3.0

5
推荐指数
0
解决办法
872
查看次数

DirectShow 捕获源和 FFMPEG

我有一张 AJA Capture 卡。随卡安装的驱动程序包括一些 DirectShow 过滤器。如果我将过滤器弹出到 GraphEdit 中,我会看到:

GraphEdit 中的 AJA 捕获过滤器

如果我运行 ffmpeg 命令

ffmpeg -f dshow -list_options true -i video="AJA Capture Source"
Run Code Online (Sandbox Code Playgroud)

我懂了

[dshow @ 0034eec0] DirectShow video device options
[dshow @ 0034eec0]  Pin "Video"
[dshow @ 0034eec0]   pixel_format=yuyv422  min s=720x486 fps=27.2604 max s=1024x
486 fps=29.985
...
[dshow @ 0034eec0]  Pin "Audio 1-2"
[dshow @ 0034eec0]  Pin "Line21"
video=AJA Capture Source: Immediate exit requested
Run Code Online (Sandbox Code Playgroud)

所以我看到了我需要的视频和音频引脚。但是当我尝试运行 ffmpeg 命令来捕获两者时,我只能弄清楚如何做视频部分。如何连接到该音频引脚?似乎所有的示例和文档都指向使用单独的音频设备,而不是挂钩到引脚。我现在像这样从批处理文件中运行它,我使用 ^ 来断行

ffmpeg.exe ^
-y ^
-rtbufsize 100M ^
-f dshow ^
-i video="AJA Capture …
Run Code Online (Sandbox Code Playgroud)

directshow ffmpeg video-capture

3
推荐指数
2
解决办法
9109
查看次数