私の仕事ではそれしか許可されていないので、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();