0

我正在尝试在 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/

4

1 回答 1

0

我最终使用了结构图。

于 2013-02-22T04:48:11.643 回答