Allthought silverlight 5.0 is nog formally supported I would expect
that binaries for SL 4.0 would work with silverlight 5.0. I experience
the error below upon the first resolve for the container.
Can this be related to http://issues.castleproject.org/issue/DYNPROXY-161,
which is marked as solved ?
Kind regards,
Marwijn.
{System.InvalidOperationException: A strong name key pair is required
to emit a strong-named dynamic assembly.
at
System.Reflection.Emit.AssemblyBuilder.nCreateDynamicAssembly(AppDomain
domain, AssemblyName name, Evidence identity, StackCrawlMark&
stackMark, PermissionSet requiredPermissions, PermissionSet
optionalPermissions, PermissionSet refusedPermissions, Byte[]
securityRulesBlob, Byte[] aptcaBlob, AssemblyBuilderAccess access,
DynamicAssemblyFlags flags, SecurityContextSource
securityContextSource)
at System.Reflection.Emit.AssemblyBuilder..ctor(AppDomain domain,
AssemblyName name, AssemblyBuilderAccess access, String dir, Evidence
evidence, PermissionSet requiredPermissions, PermissionSet
optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark&
stackMark, IEnumerable`1 unsafeAssemblyAttributes,
SecurityContextSource securityContextSource)
at
System.Reflection.Emit.AssemblyBuilder.InternalDefineDynamicAssembly(AssemblyName
name, AssemblyBuilderAccess access, String dir, Evidence evidence,
PermissionSet requiredPermissions, PermissionSet optionalPermissions,
PermissionSet refusedPermissions, StackCrawlMark& stackMark,
IEnumerable`1 unsafeAssemblyAttributes, SecurityContextSource
securityContextSource)
at System.AppDomain.InternalDefineDynamicAssembly(AssemblyName
name, AssemblyBuilderAccess access, String dir, Evidence evidence,
PermissionSet requiredPermissions, PermissionSet optionalPermissions,
PermissionSet refusedPermissions, StackCrawlMark& stackMark,
IEnumerable`1 assemblyAttributes, SecurityContextSource
securityContextSource)
at System.AppDomain.DefineDynamicAssembly(AssemblyName name,
AssemblyBuilderAccess access)
at Castle.DynamicProxy.ModuleScope.CreateModule(Boolean
signStrongName)
at
Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName()
at Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(Boolean
isStrongNamed)
at Castle.DynamicProxy.ModuleScope.DefineType(Boolean
inSignedModulePreferably, String name, TypeAttributes flags)
at
Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope
modulescope, String name, Type baseType, IEnumerable`1 interfaces,
TypeAttributes flags, Boolean forceUnsigned)
at
Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope
modulescope, String name, Type baseType, IEnumerable`1 interfaces,
TypeAttributes flags, Boolean forceUnsigned)
at
Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope
modulescope, String name, Type baseType, IEnumerable`1 interfaces)
at
Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String
typeName, Type parentType, IEnumerable`1 interfaces)
at
Castle.DynamicProxy.Generators.DelegateProxyGenerator.GenerateType(String
name, INamingScope namingScope)
at
Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey
cacheKey, Func`3 factory)
at
Castle.DynamicProxy.Generators.DelegateProxyGenerator.GetProxyType()
at
Castle.Facilities.TypedFactory.Internal.DelegateProxyFactory.GetProxyType(IProxyBuilder
builder, Type targetDelegateType)
at
Castle.Facilities.TypedFactory.Internal.DelegateProxyFactory.Generate(IProxyBuilder
builder, ProxyGenerationOptions options, IInterceptor[] interceptors,
ComponentModel model, CreationContext context)
at
Castle.Windsor.Proxy.DefaultProxyFactory.Create(IProxyFactoryExtension
customFactory, IKernel kernel, ComponentModel model, CreationContext
context, Object[] constructorArguments)
at
Castle.Facilities.TypedFactory.DelegateFactoryActivator.InternalCreate(CreationContext
context)
at
Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext
context, Burden burden)
at
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext
context, Boolean trackedExternally)
at
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext
context, IReleasePolicy releasePolicy)
at
Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext
context, Boolean requiresDecommission, Boolean instanceRequired,
Burden& burden)
at
Castle.MicroKernel.Handlers.ExtendedHandler.InvokeResolvePipeline(Int32
extensionIndex, ResolveInvocation invocation)
at
Castle.MicroKernel.Handlers.ExtendedHandler.<>c__DisplayClass9.<InvokeResolvePipeline>b__8()
at Castle.MicroKernel.Handlers.ResolveInvocation.Proceed()
at
Castle.MicroKernel.Handlers.ComponentLifecycleExtension.Intercept(ResolveInvocation
invocation)
at
Castle.MicroKernel.Handlers.ExtendedHandler.InvokeResolvePipeline(Int32
extensionIndex, ResolveInvocation invocation)
at
Castle.MicroKernel.Handlers.ExtendedHandler.Resolve(CreationContext
context, Boolean instanceRequired)
at
Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context)
at
Castle.MicroKernel.Handlers.DefaultGenericHandler.Resolve(CreationContext
context, Boolean instanceRequired)
at
Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context)
at
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveFromKernelByType(CreationContext
context, ComponentModel model, DependencyModel dependency)
at
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveFromKernel(CreationContext
context, ComponentModel model, DependencyModel dependency)
at
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveCore(CreationContext
context, ISubDependencyResolver contextHandlerResolver, ComponentModel
model, DependencyModel dependency)
at
Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationContext
context, ISubDependencyResolver contextHandlerResolver, ComponentModel
model, DependencyModel dependency)
at
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateConstructorArguments(ConstructorCandidate
constructor, CreationContext context)
at
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext
context)
at
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext
context)
at
Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext
context, Burden burden)
at
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext
context, Boolean trackedExternally)
at
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext
context, IReleasePolicy releasePolicy)
at
Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext
context, Boolean requiresDecommission, Boolean instanceRequired,
Burden& burden)
at
Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext
context, Boolean instanceRequired)
at
Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext
context)
at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler
handler, Type service, IDictionary additionalArguments, IReleasePolicy
policy)
at
Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type
service, IDictionary arguments, IReleasePolicy policy)
at Castle.MicroKernel.DefaultKernel.Resolve(Type service,
IDictionary arguments)
at Castle.Windsor.WindsorContainer.Resolve(Type
To reproduce the problem in a simpler situation I've created a new
silver application project and put the code below in MainPage.cs and
added references to castle and windsor.
Reverting the project to Silverlight 4 did not solve the issue.
Allthough the application is then compiled for SL 4.0 I think is still
executed with the 5.0 runtime, which could cause the problem. This
could also mean that any application using castle and dynamicproxy
will fail when the user installs the new 5.0 runtime.
Sorry I've not seen issue 163 I think it is the same issue that I've
experienced.
I don't know how to use the .ctor overload, could you give me some
example code for that ?
Thanks for your time,
Marwijn.
public interface IA
{
void foo();
}
public class A : IA
{
public A()
{
}
public void foo()
{
}
}
public class MyInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
invocation.Proceed();
}
}
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
IWindsorContainer container = new WindsorContainer();
container.Register(
Component.For<MyInterceptor>(),
Component.For<IA>().ImplementedBy<A>().Interceptors(InterceptorReference.ForType<MyInterceptor>()).Last);
var a = container.Resolve<IA>(); --> crashes cause proxy
cannot be created, without using an interceptor it will not crash.
}
}
The suggestion with modulescope works. I'm using the code below now.
Thanks for the suggestion.
Marwijn.
private class MyProxyFactory : DefaultProxyFactory
{
public MyProxyFactory()
{
DefaultProxyBuilder proxyBuilder = new
DefaultProxyBuilder(new ModuleScope(false, true));
generator = new ProxyGenerator(proxyBuilder);
}
}
_container = new WindsorContainer(new MyProxyFactory());
Kind regards,
Marwijn.