2

バージョン 2.5.1 からバージョン 3.1.0 にアップグレード中ですが、以前は機能していた機能が機能しなくなりました。ジェネリックを使用するコンポーネントを作成するファクトリを解決しようとしています。スローされるエラーは「ComponentActivator: could not proxy」で、 は解決できないファクトリの名前です

public class MyObject { }

public class MyContext { }

public class DummyComponent<T> : IDummyComponent<T> where T : MyObject { }

public interface IDummyComponent<T> { }

public interface IDummyComponentFactory
{
    IDummyComponent<T> Create<T>(object o);
}

class Program
{
    static void Main(string[] args)
    {
        var windsorContainer = new WindsorContainer();
        windsorContainer.AddFacility<TypedFactoryFacility>()
            .Register(
                Component.For(typeof(IDummyComponent<>)).ImplementedBy(typeof(DummyComponent<>)),
                Component.For<IDummyComponentFactory>().AsFactory());
        var factory = windsorContainer.Resolve<IDummyComponentFactory>(); <-- Error Occurs Here
        var myDummyComponent = factory.Create<MyObject>(new object());
    }
}

このコードは、削除されたオブジェクトを次のように処理するために、EntityContext を別のリポジトリに渡すために、Entity Framework リポジトリ内で次のように使用されます。

    public virtual IEnumerable<T> Where(Expression<Func<T, bool>> predicate, bool showDeleted = false, MergeOption mergeOption = MergeOption.AppendOnly)
    {           
        if (typeof(IDeletable).IsAssignableFrom(typeof(T)))
        {
            var factory = Container.Instance.Resolve<IDeletableRepositoryFactory>();
            var repository = factory.GetDeletableRepository<T>(EntityContext);
            return repository.Where(predicate, showDeleted, mergeOption);
        }

        return GetObjectSet(mergeOption).Where(predicate);                      
    }

更新:内部例外を含む

System.Security.VerificationException
{"Operation could destabilize the runtime."} at
Castle.MicroKernel.Proxy.ProxyOptions.get_MixIns() in 
c:\BuildAgent\work\5b096cace0fecb1f\src\Castle.Windsor\MicroKernel\Proxy\ProxyOptions.cs:line 96 at 
Castle.Windsor.Proxy.DefaultProxyFactory.CreateProxyGenerationOptionsFrom(ProxyOptions proxyOptions, IKernel kernel, CreationContext context, ComponentModel model) in 
c:\BuildAgent\work\5b096cace0fecb1f\src\Castle.Windsor\Windsor\Proxy\DefaultProxyFactory.cs:line 178 at
Castle.Windsor.Proxy.DefaultProxyFactory.Create(IKernel kernel, Object target, ComponentModel model, CreationContext context, Object[] constructorArguments) in 
c:\BuildAgent\work\5b096cace0fecb1f\src\Castle.Windsor\Windsor\Proxy\DefaultProxyFactory.cs:line 105 at
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext context, ConstructorCandidate constructor, Object[] arguments) in 
c:\BuildAgent\work\5b096cace0fecb1f\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:line 123`
4

2 に答える 2

3

これは Intellitrace の問題であると思われ、無効にすることで解決されます。

  • [ツール] -> [オプション] -> [IntelliTrace] ([Intellitrace を有効にする] のチェックを外します)

同様の問題を抱えている他の人への参照が見つかりました。

于 2012-10-01T14:27:38.220 に答える
3

コードを実行してみましたが、私のマシンでは動作します

ここに画像の説明を入力

于 2012-09-27T21:18:25.313 に答える