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 に答える