باید از قابلیت scan در StructureMap استفاده کنید:
ObjectFactory.Initialize(x =>
{
var dynamicProxy = new ProxyGenerator();
x.Scan(scanner =>
{
scanner.AssemblyContainingType<IMyType>(); // نحوه یافتن اسمبلی لایه سرویس
// Connect `IName` interface to 'Name' class automatically
scanner.WithDefaultConventions()
.OnAddedPluginTypes(plugin => plugin.EnrichWith(target =>
dynamicProxy.CreateInterfaceProxyWithTargetInterface(target.GetType().GetInterfaces().First(),
target.GetType().GetInterfaces(), target,
new LoggingInterceptor())
));
});
});
- در این حالت AssemblyContainingType
مشخص میکند که کدام اسمبلی باید اسکن شود.
- WithDefaultConventions
یعنی هرجایی IName داشتیم را به صورت خودکار به Name متصل کن. (روال پیش فرض سیم کشی اینترفیسها و کلاسها برای وهله سازی)
- OnAddedPluginTypes
یک Callback هست که زمان انجام اولیه تنظیمات به ازای هر type یافت شده فراخوانی میشود. در اینجا میشود با استفاده از EnrichWith
و ProxyGenerator
کار اتصال کلاس Interceptor
را انجام داد.