私のプロジェクトのために次のことが私を助け:
Startup.cs方法ConfigureServices追加行で:
services.AddHandlers("Project name");
その実装:
public static IServiceCollection AddHandlers(this IServiceCollection services, string assemblyName)
{
var assemblyPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), assemblyName + ".dll");
var assembly = Assembly.Load(AssemblyLoadContext.GetAssemblyName(assemblyPath));
var classTypes = assembly.ExportedTypes.Select(t => IntrospectionExtensions.GetTypeInfo(t)).Where(t => t.IsClass && !t.IsAbstract);
foreach (var type in classTypes)
{
var interfaces = type.ImplementedInterfaces.Select(i => i.GetTypeInfo());
foreach (var handlerType in interfaces.Where(i => i.IsGenericType))
{
services.AddTransient(handlerType.AsType(), type.AsType());
}
}
return services;
}
MVCがどのようにクラスを登録すべきですか?コードの一部は '新しいYouClass'を実行する必要があります。さらに、オブジェクトを一度作成(Singleton)するか、新しいインスタンスを毎回作成するか(Transient)、MVCに通知する必要があります。たとえば、[here](http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx)を参照してください。また、コントローラまたはビュー内のオブジェクト(またはそのインタフェース)のインスタンスへの参照を取得するには、何らかの方法が必要です。依存関係注入はすべてこれを行うのに役立ちますが、必要なものを通知する必要があります – Oleg
登録は少しシンプルになります: 'services.AddTransient()'。 –
オレグ、反射について聞いたことがありますか? –