2012-05-10 10 views
8

"BigEye.Business"という名前のDLLを登録しようとしていて、そのファイルをmvc 3プロジェクトに参照しています。しかし、私はそのdllでオブジェクトのインスタンスを取得しようとすると、autofacはそれが登録されていないと言います。ここで私はオブジェクトを登録し、解決方法を示します。Assembly.Loadを使用したAutofacレジスタのDLL

private static IContainer SetDIContainer() 
     { 
      var builder = new ContainerBuilder(); 
      builder.RegisterControllers(Assembly.GetExecutingAssembly()); 
      builder.RegisterType<UserAuthManager>().As<IUserAuth>().InstancePerHttpRequest(); 
      builder.RegisterType<SessionManager>().As<ISession>().InstancePerHttpRequest(); 


      //Here is the code to register that dll 
      var services = Assembly.Load("BigEye.Business"); 
      builder.RegisterAssemblyTypes(services); 
      IContainer container = builder.Build(); 
      DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

      return container; 
     } 

     public static T GetInstance<T>() 
     { 
      IContainer container = SetDIContainer(); 

      using(var httpRequestScope = container.BeginLifetimeScope("httpRequest")) 
      { 
       return httpRequestScope.Resolve<T>(); 
      } 

     } 

と私はしたgetInstance関数を呼び出すとき、私は「要求されたサービス 『BigEye.Interfaces.Business.IUser』は登録されていない」を得ます。私はビジネスDLLのすべてのコンポーネントを登録する必要がありますか?それを行う方法はありますか?ビジネスにおけるオブジェクトとサービスは時間的に変化するためです。

おかげ

+0

プロジェクトのdllへの参照を追加するだけではありませんか? –

+1

さて、私はそれを行うことができますが、私はそれを注入したい... – mehmetserif

+0

それは 'builder.RegisterAssemblyTypes(サービス);'は何をすることになっていますか?私はあなたがその行が実際にやっていることを理解することができたら、それに踏み込んでみようと思います。アセンブリ間に継承がありますか?つまり、ビジネスアセンブリで実装されているインタフェースを定義するアセンブリへの参照を追加できますか? – Rup

答えて

8

は、私はあなたのアセンブリがIUserインタフェースの1つ以上の実施が含まれていることを前提としています。さて、あなたが実行したとき:

builder.RegisterAssemblyTypes(services); 

をあなたが実際にクラスをキーとそのアセンブリにすべてのタイプを登録している任意の追加パラメータなし。おそらく、この解決が機能することを確認できます。

GetInstance<SomeSpecificUserImplementation>(); 

インタフェースによってあなたのサービスをキー入力するためには、単純に次の操作を行います

builder.RegisterAssemblyTypes(services).AsImplementedInterfaces(); 

今、すべてのサービスは、彼らのインターフェイスをキーとします特定のクラスの代わりに実装すると、次のように動作します。

GetInstance<IUser>(); 
関連する問題