IHostBuilder中Windsor的DictionaryAdapterFactory相当于什么?

What's the equivalent of the DictionaryAdapterFactory of Windsor in IHostBuilder?

我正在将控制台应用程序从 .NET 4.6 迁移到 .NET 5。 同时,我们的想法是摆脱 Castle.Windsor 并开始使用 Microsoft.Extensions.

中存在的内置依赖注入

我会诚实的。我不习惯他们中的任何一个。该应用程序有一个 IApplicationConfiguration,它表示我们需要从 app.config 文件中得到什么。

如何将其转换为 IHostBuilder?

提前致谢

是的,经过调查,我找到了使用反射的解决方案。

这是一个例子:

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace TestConsoleNet5
{
    public class Program
    {
        public static void Main()
        {
            AssemblyName aName = new AssemblyName("DynamicAssemblyExample");

            AssemblyBuilder ab =
                AssemblyBuilder.DefineDynamicAssembly(
                    aName,
                    AssemblyBuilderAccess.RunAndCollect);
            ModuleBuilder mb =
                ab.DefineDynamicModule(aName.Name + "Module");
            TypeBuilder tb = mb.DefineType(
                "MyDynamicType",
                 TypeAttributes.Public);

            BuildPropertyAndConstructor(tb, "This is a test");

            tb.AddInterfaceImplementation(typeof(ITest));
            var type = tb.CreateType();
            ITest test = Activator.CreateInstance(type) as ITest;
            Console.WriteLine(test.propTest);
        }

        private static void BuildPropertyAndConstructor(TypeBuilder typeBuilder, string defaultValue)
        {
            string propName = "propTest";
            FieldBuilder field = typeBuilder.DefineField("m" + propName, typeof(string), FieldAttributes.Private);
            PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(propName, PropertyAttributes.None, typeof(string), null);

            MethodAttributes getSetAttr = MethodAttributes.Public |
                MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.Virtual;

            MethodBuilder getter = typeBuilder.DefineMethod("get_" + propName, getSetAttr, typeof(string), Type.EmptyTypes);

            ILGenerator getIL = getter.GetILGenerator();
            getIL.Emit(OpCodes.Ldstr, defaultValue);
            getIL.Emit(OpCodes.Ret);


            propertyBuilder.SetGetMethod(getter);
        }
    }
    public interface ITest
    {
        string propTest { get; }
    }
}

因此,在您找到“这是一个测试”的地方,您应该传递配置文件中的值。

接口也应该是 IApplicationConfiguration

有点乱,但还行。