コード例 #1
0
        private void AutofacContainerBuilder_Building(object sender, AppContainerBuilderBuildEventArgs e)
        {
            AutofacContainerBuilder autofacContainerBuilder = (AutofacContainerBuilder)sender;

            foreach (var method in methods)
            {
                autofacContainerBuilder.RemoveComponentByComponentType(method.Method.ReturnType);
                autofacContainerBuilder.RegisterByCreator(cm =>
                {
                    ParameterInfo[] ps = method.Method.GetParameters();
                    if (ps.Length == 0)
                    {
                        return(method.Method.Invoke(method.Target, null));
                    }
                    object[] values = new object[ps.Length];
                    for (int i = 0; i < ps.Length; i++)
                    {
                        Type pType   = ps[i].ParameterType;
                        object value = cm.CreateComponent(pType);
                        values[i]    = value;
                    }
                    return(method.Method.Invoke(method.Target, values));
                }, method.Method.ReturnType);
            }
        }
        private void AutofacContainerBuilder_Building(object sender, AppContainerBuilderBuildEventArgs e)
        {
            ProxyGenerator          proxyGenerator = new ProxyGenerator();
            AutofacContainerBuilder autofacContainerBuilder
                = (AutofacContainerBuilder)sender;

            foreach (var info in attributeAndTypeInfos)
            {
                autofacContainerBuilder.RegisterByCreator(c =>
                {
                    c.InjectProperties(info.Attribute);

                    ImplementorAttributeExecuteInterceptor interceptor = new ImplementorAttributeExecuteInterceptor(info.Type, (ImplementorAttribute)info.Attribute);
                    var rlt = proxyGenerator.CreateInterfaceProxyWithoutTarget(
                        info.Type,
                        interceptor
                        );
                    return(rlt);
                }, info.Type);
            }
        }