2016-04-08 13 views
2

私はAutoFacの新機能で、契約やそれぞれの実装でWebApiとビジネスレイヤを使用して新しいプロジェクトに使用しようとしています。WebApi&Business Layerを使用したオートファンクション

webapi用のIocConfigurationを作成し、global.asaxから呼び出します。

しかし、私のビジネスロジックでは、私の契約や実装をオートファックでどのようにセットアップするのですか?

私はいくつかのチュートリアルをオンラインで行ったことがありますが、役立つものは何も見つかりませんでした。誰かがサンプルアプリケーションを持っていれば、本当に役立つリンクです。

編集:

AutoMapperプロファイル。

public class CustomProfile : Profile 
{ 
    protected override void Configure() 
    { 
     CreateMap<MyViewModel, MyModel>() 
      .ForMember(d => d.Id, s => s.MapFrom(src => src.Id)); 
    } 
} 

編集:これに費やした数の長い時間後に私はAutoFacでどのようにセットアップAutoMapper 4.2.1を考え出し

。 AutoMapper 3.3.0でConfigurationStoreを使用していたようですが、4.2.1にアップグレードしてプロファイルの登録が少し変更されました。以下は私のために働いたものです。

public class AutoMapperModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     Mapper.Initialize(cfg => 
     { 
      cfg.AddProfile<MyProfile1>(); 
      cfg.AddProfile<MyProfile2>(); 
     }); 

     base.Load(builder); 
    } 
} 

答えて

2

コンストラクタインジェクションを使用する場合(それは本当に良い考えです)。 まず、addを使用して、Nuget経由でAutofac.WebApi2アセンブリへの参照を追加する必要があります。

public class DependenyInitializer 
{ 

    public static readonly DependenyInitializer Instance = new DependenyInitializer(); 

     private DependenyInitializer() 
     { 
      var builder = new ContainerBuilder(); 
      builder.RegisterModule<BusinessLayerModule>(); // register all dependencies that has been set up in that module 
      builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
      this.Container = builder.Build(); 
     } 

public IContainer Container { get; } 

} 

グレードってこんなモンレイヤー

:あなたのコントローラが異なるアセンブリ内のホスト(service.dllからか、このようなsomethink)ということだと思うすべての私たちのコントローラと、あなた

サービス プロジェクトことができます

はモジュール

using System.Reflection; 
    using Autofac; 
    using DataAccessLayer; 
    using Module = Autofac.Module; 

public class BusinessLayerModule : Module 
    { 
    protected override void Load(ContainerBuilder builder) 
     { 
     builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces(); // that links all clases with the implemented interfaces (it they mapped 1:1 to each other) 
     } 
に作成する必要がありますyou`llホスティング

(レジスタのWebApiConfig.csを(HttpConfiguration設定))ここ

var container = DependenyInitializer.Instance.Container; 
    config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

メインcompexityあなたはAutofac.WebApi2とそれ `s RegisterApiControllersが必要であることを知っています。それを試してください。

+0

ありがとうございました。私は異なるプロジェクトで私のwebapiとビジネスを持っている、私は別のプロジェクトで私のビジネスマネージャ契約を持っています。だから、私はビジネスマネージャのインターフェイスをWeb APIのコントローラコンストラクタに挿入します。 私はBusinessLayerModuleを書いたが、ブートストラップでは呼び出されないことが示唆されている。しかし、ビジネスレイヤモジュールはブートストラップしません。明らかに、モジュールbuilder.RegisterModule ()を登録していません。私のアプローチは正しいですか? – Immortal

+0

あなたのアプローチは正しいように見えます。プロジェクトでDependencyInitializerを使用していますか?ビルダーにすべての依存関係が実際に登録されています。あなたがそれらを使用することができるだけ後にBuild()を作成してください – Vladimir

+0

まだ問題がある場合はコメントを書いてください、私は助けようとします – Vladimir

関連する問題