在VB.NET中使用Unity AutoConfig配置拦截

时间:2013-01-15 06:26:42

标签: c#-to-vb.net unity-interception

我正试图在vb.net中进行拦截,因为我的工作只允许这样做。我使用它的方法是配置一些记录器,以便运行的每个业务逻辑功能都被拦截并记录到数据库(不好的主意,但它只是一个例子)。这是我发现的一个例子:

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

这是我试图在vb.net中工作的东西,但它一直在抛出错误。

    container.
    ConfigureAutoRegistration().
    Include([if].ImplementsITypeName, Function(x, y)
        if x.IsClass
            y.Configure(of Interception)()
                .SetDefaultInterceptorFor(x,new VirtualMethodInterceptor())
    End Function)

错误是:

Argument not specified for parameter 'type' of 'Public Shared Function ImplementsITypeName(type as System.Type) As Boolean.

现在很明显我需要指定一些类型,但关键是我需要自动重新调整,所以为什么我需要提供一个类型?此外,C#代码不需要它,代码示例也没有(见下文)。

        var container = new UnityContainer();

        container
            .ConfigureAutoRegistration()
            .ExcludeAssemblies(a => a.GetName().FullName.Contains("Test"))
            .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode())
            .Include(If.ImplementsITypeName, Then.Register().WithTypeName())
            .Include(If.Implements<ICustomerRepository>, Then.Register().WithName("Sample"))
            .Include(If.Implements<IOrderRepository>,
                     Then.Register().AsSingleInterfaceOfType().UsingPerCallMode())
            .Include(If.DecoratedWith<LoggerAttribute>,
                     Then.Register()
                            .As<IDisposable>()
                            .WithTypeName()
                            .UsingLifetime<MyLifetimeManager>())
            .Exclude(t => t.Name.Contains("Trace"))
            .ApplyAutoRegistration();

http://autoregistration.codeplex.com/

1 个答案:

答案 0 :(得分:0)

我最终使用了结构图。