Исключение - Невозможно проглотить исключения для методов с ненулевым типом возвращаемого значения.
Мы разработали пример проекта для обработки всех исключений, используя блок обработчика исключений entlib и Unity.
Когда я пытаюсь вызвать метод, использующий контейнер единиц, я получаю следующее исключение: "Невозможно проглотить исключения для методов с ненулевым возвращаемым типом".
Если мы попытаемся вызвать метод void, он будет работать нормально.
Ниже приведен код,
IUnityContainer unityContainer = new UnityContainer();
unityContainer.LoadConfiguration("Container1");
var service2 = unityContainer.Resolve<IABCServices>("Impl1");
string dd= service2.DoSomething(55);
Его файл конфигурации приведен ниже,
<alias alias="string" type="System.String, mscorlib"/>
<alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<alias alias="transient" type="Microsoft.Practices.Unity.TransientLifetimeManager, Microsoft.Practices.Unity" />
<alias alias="InterceptionConfigurationExtension" type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
<alias alias="EnterpriseLibraryCoreExtension" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity.EnterpriseLibraryCoreExtension, Microsoft.Practices.EnterpriseLibrary.Common" />
<alias alias="ExceptionCallHandler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.PolicyInjection.ExceptionCallHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" />
<alias alias="IABCServices" type="ABC.GGG.Integration.Contracts.SSSService.Interfaces.IABCServices, ABC.GGG.Integration.Contracts" />
<alias alias="ABCServices" type="ABC.GGG.Integration.Implementation.SSSService.ABCServices, ABC.GGG.Integration.Implementation" />
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
<container name="Container1">
<register type="string"></register>
<extension type="EnterpriseLibraryCoreExtension"/>
<extension type="Interception" />
<register type="IABCServices">
<interceptor isDefaultForType="true" type="TransparentProxyInterceptor"/>
</register>
<register name="Impl1" type="IABCServices" mapTo="ABCServices">
<interceptionBehavior type="PolicyInjectionBehavior"/>
</register>
<interception>
<policy name="MyPolicy">
<matchingRule name="exceptionHandling" type="TypeMatchingRule">
<constructor>
<param name="typeName">
<value value="ABC.GGG.Integration.Contracts.SSSService.Interfaces.IABCServices" />
</param>
</constructor>
</matchingRule>
<callHandler name="ExceptionHandlingCallHandler" type="ExceptionCallHandler">
<lifetime type="singleton" />
<constructor>
<param name="exceptionPolicy" dependencyName="Policy" />
</constructor>
</callHandler>
</policy>
</interception>
</container>
</unity>
Может ли кто-нибудь объяснить, как решить эту проблему?
1 ответ
Решение
Не пустые методы должны возвращать что-либо или бросать. Сообщение говорит, что у вас есть конфигурация, которая пытается проглотить исключения. Вероятно, он должен быть настроен для регистрации исключений и их повторного выброса.