2016-11-30 9 views
0

私はAutofacを初めて使用していますが、ビルダーにオブジェクトを渡す方法がわかりません。c#autofac解決の問題

public class OrderFactory : IOrderFactory { 
    private readonly IAffiliate _affiliate; 
    private readonly IGetNewOrdersToImport _ordersToImportHelper; 
    private readonly IOrderProcessor _orderProcessor; 

    public OrderFactory(IAffiliate affiliate, IGetNewOrdersToImport ordersToImport, IOrderProcessor orderProcessor) { 
     _affiliate = affiliate; 
     _ordersToImportHelper = ordersToImport; 
     _orderProcessor = orderProcessor; 
    } 
} 

ブートストラップ

アプリを実行すると、私が最初にアフィリエイトをロードし、OrderFactory

をアフィリエイトを渡したいのです

public IContainer Configure() { var builder = new ContainerBuilder(); builder.RegisterType<Channel>().As<IAffiliate>(); builder.RegisterType<OrderFactory>().As<IOrderFactory>(); return builder.Build(); } 

プログラム

var channel = new Channel().Get(param); 
var merchantOrderManager = _myContainer.Resolve<IOrderFactory>(); 
merchantOrderManager.ImportMerchantOrders(); 

そのチャネルオブジェクトは、現在多くのプロパティが移入し、私はOrderFactoryにChannelオブジェクトにアクセスしたいが、私は、アフィリエイトヌルを取得しています。..

さて、私はリポジトリを作成し、そこからチャネルを取得

+0

... OrderFactoryが返されるたびに、私はChannelRepositoryからチャンネルを取得することを意味は 'null'なのでありますか? – haim770

+0

OrderFactoryでアクセスしようとするとチャネルオブジェクトがnullになる –

+0

スニペットで定義されたこの特定のチャンネルをパラメータとして工場に渡しますか? – Moutabreath

答えて

0

をアドバイスをしてください。..正確にオブジェクト。

public IContainer Configure(IAffiliate affiliate) 
    { 
     var builder = new ContainerBuilder(); 

     builder.Register(c => new ChannelRepository().Get(affiliate.Code)).As<IAffiliate>(); 
     builder.RegisterType<DbContext>().As<IDbContext>().InstancePerLifetimeScope(); 

     builder.RegisterType<OrderFactory>().As<IOrderFactory>(); 

     return builder.Build(); 
    } 

ので、これは