Я искал исправление в течение нескольких дней, но безуспешно.
В основном мы используем Unity для двух вещей: внедрения зависимостей и, что более важно, для перехвата.
Я хочу, чтобы перехватчик срабатывал каждый раз, когда вызывается метод внутри частичного класса, но я вижу, что перехватчик вызывается несколько раз в зависимости от числа отображений, которые я создаю в web.config., что означает 2 отображения, 2 перехвата для каждого вызванного метода.
В примерах кода ниже все частичные классы имеют одинаковое имя, но реализуют разные интерфейсы, и все они находятся в разных файлах .cs, потому что эта библиотека будетбыть перемещенным в WCF в краткосрочной перспективе.Итак, у нас есть несколько частичных классов, которые выглядят следующим образом:
public partial class PartialClass : IInterface1
{
...
}
public partial class PartialClass : IInterface2
{
...
}
И файл конфигурации выглядит так:
<alias alias="IInterface1" type="MyProject.Interface.IInterface1, MyProjectAssembly" />
<alias alias="IInterface2" type="MyProject.Interface.IInterface1, MyProjectAssembly" />
<alias alias="PartialClass" type="MyProject.Services.PartialClass , MyProjectAssembly" />
<alias alias="Interceptor" type="MyProject.Services.Interceptor, MyProjectAssembly" />
<container>
extension type="Interception" />
<register type="IInterface1" mapTo="PartialClass">
<lifetime type="ContainerControlledLifetimeManager" />
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="Interceptor" />
</register>
register type="IInterface2" mapTo="PartialClass">
<lifetime type="ContainerControlledLifetimeManager" />
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="Interceptor" />
</register>
</container>
Наконец, конструктор, в котором необходим экземпляр любого частичного класса
public class MyClass()
{
public MyClass(IInterface1 interface)
{
...
}
public MyClass()
:this(Microsoft.Practices.Unity.UnityContainerExtensions.Resolve<IInterface1>(Container))
{
}
}
Проблема, с которой я столкнулся, заключается в том, что перехватчик вызывается ДВА раза за запрос, а это означает, что если я добавлю больше отображений (Interface3, Interface4 и т. Д.), Он будет вызываться 3 или 4 раза в зависимости отколичество отображений, которые я добавляю.