2016-07-29 19 views
0

私はコンソールアプリケーションに依存性注入のためにautofacを使用しようとしています。私は、autofacが特定のインタフェース/クラス用のコンストラクタを見つけることができない問題に取り組んでいます。autofacとconsole appとの混乱登録

IRepository:

public interface IRepository<Planetary> 
{ 
    IEnumerable<Planetary> Get(); 
} 

IPlanetaryRepository:ここ

は私の最新の例である

public interface IPlanetaryRepository : IRepository<Planetary> 
{ 
    IQueryable<Planetary> GetPlanetary(SystemProbe user); 
} 

PlanetaryService:

public interface IPlanetaryService 
{ 
    Task<Planetary> Clone(Planetary source); 
} 

public sealed class PlanetaryService : IPlanetaryService 
{ 
    private IPlanetaryRepository Repo { get; } 

    public PlanetaryService(IPlanetaryRepository repo) 
    { 
     Repo = repo; 
    } 
} 

スケジューラ:型 'IPlanetaryRepository' に関する

public class Scheduler 
{ 
    private static IContainer Container { get; set; } 

    static void Main() 
    { 
     var builder = new ContainerBuilder(); 
     builder.RegisterType<PlanetaryService>().As<PlanetaryService>(); 
     builder.RegisterType<IPlanetaryRepository>().As<IPlanetaryRepository>(); 

     Container = builder.Build(); 

     GenerateSchedules(); 
    } 

    public static void GenerateSchedules() 
    { 
     using (var scope = Container.BeginLifetimeScope()) 
     { 

      var repo = scope.Resolve<PlanetaryService>(); <-- line where exception is thrown 
     } 
    } 
} 

ませんコンストラクタが コンストラクタファインダー 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' で見つけることができます。

私はIPlanetaryRepositoryを取る場合、私はこの例外を取得:

は、コンストラクタのパラメータIPlanetaryRepositoryレポを解決することはできません...

だから私は何をすべきか本当にわかりません。 'PlanetaryService'は 'IPlanetaryRepository'をパラメータとして必要としますが、IPlanetaryRepositoryにはコンストラクタがありません。

これを修正する方法はありますか?

+1

このbuilder.RegisterTypeを登録しないでください.RegisterType ().As (); ' – din

+1

あなたはIPlanetaryRepositoryの実装をどこにも持っていません。 1つを書き、AutoFacで登録してください。 –

+0

@ RichardIrons IPlanetaryRepositoryを継承するクラスがあれば十分でしょうか?ありがとう! – SkyeBoniwell

答えて

1

IPlanetaryRepositoryを実装するクラスがないので、コンストラクタを見つけることができません。

関連する問題