c# - CaSTLe.Windsor 3.1 - 组件激活器 : could not proxy <FactoryName>

标签 c# .net entity-framework castle-windsor

我正在从 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());
    }
}

此代码在 Entity Framework 存储库中以下列方式使用,用于将 EntityContext 传递到另一个存储库,以便像这样处理已删除的对象:

    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`

最佳答案

我试过运行你的代码,但它在我的机器上运行

enter image description here

关于c# - CaSTLe.Windsor 3.1 - 组件激活器 : could not proxy <FactoryName>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627467/

相关文章:

c# - WPF如何更新CanExecute

c# - 非静态类如何调用另一个非静态类的方法?

c# - 带有 ASP.NET MVC 的 Entity Framework

c# - 与 Entity Framework 一起使用的表达式<Func<TEntity, bool>> 嵌套

c# - Entity Framework 迁移: Sequence contains more than one matching element

c# - 如何使用ADOX连接现有的Access数据库

java - 是什么让其他语言在快速开发方面比 Java 更快?

.net 数据包捕获 : pcap. 网络 vs Sharppcap

c# - 数据库中已经有一个名为 '__MigrationHistory' 的对象

c# - 我可以从返回类型的类型中提取泛型类型吗?