2015-12-10 21 views
6

ASP.Net Coreビルトインの依存性注入機能はサービスの自動登録をサポートしていますか?私はこのようにそれらを手動でregesterしたくない:DependencyInjectionはサービスの自動登録をサポートしていますか?

services.Add(new ServiceDescriptor(typeof(IUserService), 
        new UserService(new AtmDbContext()))); 
+1

MVCがどのようにクラスを登録すべきですか?コードの一部は '新しいYouClass'を実行する必要があります。さらに、オブジェクトを一度作成(Singleton)するか、新しいインスタンスを毎回作成するか(Transient)、MVCに通知する必要があります。たとえば、[here](http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx)を参照してください。また、コントローラまたはビュー内のオブジェクト(またはそのインタフェース)のインスタンスへの参照を取得するには、何らかの方法が必要です。依存関係注入はすべてこれを行うのに役立ちますが、必要なものを通知する必要があります – Oleg

+1

登録は少しシンプルになります: 'services.AddTransient ()'。 –

+3

オレグ、反射について聞いたことがありますか? –

答えて

3

私のプロジェクトのために次のことが私を助け:

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; 
} 
関連する問題