2016-07-30 8 views
1

web4でautofacを使ってlog4netを登録しています。それはコントローラで正常に動作しますが、私は同じソリューションで共通のライブラリプロジェクトクラスに同じlog4netインスタンスを使用することができます。CommonLibraryプロジェクトでLog4NetとAutofacを使用する方法

ウェブAPIにautofacを使用してlog4netを登録するために、以下のコードを使用しました。

// IOC Container Setup uisng Autofac 
var builder = new ContainerBuilder(); 

// Register your Web API controllers. 
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
builder.Register(c => LogManager.GetLogger(typeof(Object))).As<ILog>(); 
builder.RegisterWebApiFilterProvider(config); 
builder.RegisterModule<AMLWebApiModule>(); 
builder.RegisterFilterProvider(); 
var container = builder.Build(); 
config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

私は共通ライブラリプロジェクトのプロパティとしてロガーを使用しています。 public ILog logger { get; set; }

メッセージをログに記録しようとしたときに例外が発生しました。

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

共通ライブラリプロジェクトでlog4netを使用するにはどうすればよいですか。

答えて

0

だから、この作業クラスライブラリプロジェクト 2)クラスライブラリプロジェクトにおけるアイログオブジェクトを解決における

1)を注入のILogを作るために二つのアプローチがある

私はオプション1のために行くだろう)とDIをフル活用して各コンポーネントを独立させておくために、すべてのコンポーネントをオートファックに登録します。

サンプルコード、

public interface Ilibrary 
{ 
    string GetName(); 
} 

public class Library : Ilibrary 
{ 
    private ILog _log; 
    public Library(ILog log) 
    { 
     _log = log; 
    } 
    public string GetName() 
    { 
     _log.Debug("log message"); 
     return "test"; 
    } 
} 

クラスライブラリプロジェクトの例については契約を作成し、その後、クラスライブラリプロジェクトにモジュールを作成し、アプリケーションの起動中にそのモジュールを登録するのいずれか。

public class DomainModule : Module 
{ 

    protected override void Load(ContainerBuilder builder) 
     { 
     base.Load(builder); 

     builder.RegisterType<Library>() 
     .AsImplementedInterfaces() 
     .SingleInstance(); 
     } 
} 

また、アプリケーションの開始時にこれを行うだけで、コンサートの実装にアクセスできる場合は、直接登録することもできます。

builder.RegisterType<Library>() 
.AsImplementedInterfaces() 
.SingleInstance(); 
+0

インタフェースではなく抽象クラスに対してクラスを登録するにはどうすればよいですか? –

+0

それはインターフェイスのように試してみて、私はそれが動作するはずだと思う。 – Prashant

0

あなたの共通ライブラリプロジェクト内のプロパティとしてロガーを使用しているので、あなただけの[依存関係]属性を使用して、そのプロパティに注釈を付ける/飾ることができます。これはプロパティインジェクションと呼ばれます。私はautofacでプロパティが注入された依存関係の追加の設定をしなければならないかどうかはわかりませんが、検索できない場合は試してみることができます。

関連する問題