Я разработал простой тестовый образец и использовал библиотеку moq. Но при выполнении метода Container.Resolve<IInterface>()
возникает исключение. Ниже приводится метод регистрации для замок Виндзор:Невозможно применить проблемы с комиссией к компоненту. Поздняя привязка, потому что она является прокси-сервером без цели. В настоящее время они не поддерживаются
container.Register(Component.For<TBase>().UsingFactoryMethod(() =>
{
var mockObject = new Mock<TBase>();
var mockType = typeof(TBase);
if (container is Core.IoCContainer.IoCCore.CustomContainer)
{
var resolvingDelege = (container as Core.IoCContainer.IoCCore.CustomContainer).ResolvingTestDelegateList[mockType];
if (resolvingDelege != null)
{
resolvingDelege(mockType, mockObject);
}
}
return mockObject.Object;
})
.LifestyleTransient());
при выполнении IoCCore.Container.Resolve< ISampleDataContext>();
, исключение бросают. Сообщение об исключении: «Невозможно применить проблемы с комиссией к компоненту Late bound Data.Context.ISampleDataContext, потому что он является прокси-сервером без цели. В настоящее время они не поддерживаются».
Я искал проблему и нашел, что mockObject.Object
is Castle.DynamicProxy.IProxyTargetAccessor
. Таким образом, при решении экземпляра, то код, приведенный ниже в Castle.MicroKernel.ComponentActivator.AbstractComponentActivator
классе, где возникает проблема:
protected virtual void ApplyCommissionConcerns(object instance)
{
if (Model.Lifecycle.HasCommissionConcerns == false)
{
return;
}
instance = ProxyUtil.GetUnproxiedInstance(instance);
if (instance == null)
{
// see http://issues.castleproject.org/issue/IOC-332 for details
throw new NotSupportedException(string.Format("Can not apply commission concerns to component {0} because it appears to be a target-less proxy. Currently those are not supported.", Model.Name));
}
ApplyConcerns(Model.Lifecycle.CommissionConcerns, instance);
}
Объект решается с помощью UsingFactoryMethod
является Castle.DynamicProxy.IProxyTargetAccessor
, который создается фиктивного объекта. Но, замок Виндзор предполагает, что IProxyTargetAccessor
создан сам по себе, а не макет объекта. Это приводит к тому, что из моего экземпляра mock возвращается пустой экземпляр CommissionConcerns
.
Возможно ли обходное решение для этой ошибки? Должен ли я ждать обновления?