私は単純なユニットテストパターンを設計し、moqライブラリを使用しました。しかし、Container.Resolve<IInterface>()
メソッドを実行すると例外がスローされます。以下は、城ウィンザーの登録方法であってIoCCore.Container.Resolve< ISampleDataContext>();
を実行中ターゲットレスプロキシであると思われるため、コンポーネントのレイトバウンドにコミッション懸念を適用できません。現在はサポートされていません
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());
、例外がスローされています。例外メッセージは、 "コンポーネントの遅延バウンドData.Context.ISampleDataContextに手数料に関する懸念を適用することはできません。なぜなら、ターゲットレスプロキシと思われるからです。現在はサポートされていません。
私は問題を調査し、mockObject.Object
が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
、です。しかし、Castle WindsorはIProxyTargetAccessor
がmockオブジェクトの代わりに単独で作成されていると仮定しています。これにより、私の模擬インスタンスから空のインスタンスCommissionConcerns
が返されます。
このバグの回避策はありますか?私は更新を待つべきですか?