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
有点乱,但还行。
我正在将控制台应用程序从 .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
有点乱,但还行。