2017-03-25 2 views
0

Ich lerne jetzt. NetCore und Autofac und ich habe Zweifel darüber, wie Ninject Module zu Autofac-Module zu konvertieren.Konvertieren Ninject Module zu Autofac

Lassen Sie uns einige Code sehen:

Modul:

using Ninject.Modules; 

namespace v0.CrossCutting.Ninject.Domain.Data 
{ 
    using v0.Domain.Data.Model.Interfaces; 
    using v0.Domain.Data.Model.Classes; 

    public class Model : NinjectModule 
    { 
     public override void Load() 
     { 
      try 
      { 
       Bind<IConfig>().To<Config>(); 
      } 
      catch 
      { 
       throw; 
      } 
     } 
    } 
} 

Register:

using Ninject; 
using Ninject.Modules; 

namespace v0.CrossCutting.Ninject 
{ 
    public static class Container 
    { 
     private static IKernel Kernel; 

     static Container() 
     { 
      INinjectModule[] NinjectModules = new INinjectModule[] 
      { 
       new Domain.Data.Model() 
      }; 

      Kernel = new StandardKernel(NinjectModules); 
     } 

     public static TModel Resolve<TModel>() 
     { 
      try 
      { 
       return Kernel.Get<TModel>(); 
      } 
      catch 
      { 
       throw; 
      } 
     } 
    } 
} 

ich im Internet gesucht und anderen Stack-Überlauf Fragen, aber ich konnte es immer noch nicht herausfinden, wie es zu tun.

Danke.

+2

Ihre Frage impliziert, dass Sie Ihre Bindungen über alle Projekte in Ihrer Anwendung verteilen, während [nur das Startprojekt über den Container wissen sollte] (http://blog.ploeh.dk/2011/07/28/KompositionRoot /). – Steven

+0

ist es ein DDD mit einer querschneidenden Schicht. Ich werde @Tragon Antwort testen. Vielen Dank. – rmszc81

Antwort

2

Autofac-Module sind in Autofac documentation beschrieben. Ich bin nicht sehr vertraut mit Ninject, aber es scheint, dass Sie versuchen, etwas zu erreichen:

Das Modul Klasse muss Autofac der Module Klasse implementieren und Load Methode außer Kraft setzen, ähnlich wie Ninject:

public class ModelModule : Module 
{ 
    public override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterType<Config>().As<IConfig>(); 
    } 
} 

Später , müssen Sie das Modul innerhalb des Behälters selbst registrieren:

public class ContainerConfig 
{ 
    public IContainer ConfigureAutofac() 
    { 
     var containerBuilder = new ContainerBuilder(); 
     containerBuilder.RegisterModule(new ModelModule()); 

     return containerBuilder.Build(); 
    } 
} 

Btw, statische Container Klasse mit öffentlichen und statischen Resolve Verfahren wird ein anti-Muster betrachtet und werden vermeiden sollten ed.