2

インターフェイスを使用したサービスおよびリポジトリ/DAL インスタンス化のユニティと組み合わせて、wcf サービスに WCF ServicehostFactory を使用しています。

Unity DI の web.config にタイプが登録されているアセンブリを (サービスがインスタンス化される前に) appdomain にロードしたいと考えています。

<assembly name="Customer.DAL.AdventureWorks"/>
<assembly name="Customer.DAL.Blogger"/>
<assembly name="Customer.Interfaces"/>
<assembly name="Customer.DAL"/>
<namespace name="Customer.Interfaces.Repository"/>
<namespace name="Customer.DAL.AdventureWorks"/>
<namespace name="Customer.DAL.Blogger"/>
<container>
  <register  type="Customer.Interfaces.DAL.IDal, Customer.Interfaces" mapTo="Customer.DAL.API, Customer.DAL">
    <lifetime type="transient"/>
  </register>
  <register  type="Customer.Interfaces.Repository.IRepositoryDepartment, Customer.Interfaces" mapTo="Customer.DAL.AdventureWorks.RepositoryDepartment, Customer.DAL.AdventureWorks">
    <lifetime type="transient"/>
  </register>
  <register  type="Customer.Interfaces.Repository.IRepositoryBlogs, Customer.Interfaces" mapTo="Customer.DAL.Blogger.RepositoryBlogs, Customer.DAL.Blogger">
    <lifetime type="transient"/>
  </register>
</container>

次のコードを使用してアセンブリをロードしています。

Assembly.LoadFile("C:\xxxxx\Customer.DAL.dll"); // loaded from somewhere on disk.

現在の appdomain に対して読み込まれたアセンブリの存在を確認し、アセンブリが正常に読み込まれました。その直後、Unity を使用してサービス タイプを登録しようとしましたが、次の例外が発生しました: タイプ名またはエイリアス Customer.DAL.API、Customer.DAL を解決できませんでした。構成ファイルを確認して、このタイプ名を確認してください。

では、なぜ「Customer.DAL.API」型を解決できないのでしょうか?

編集: FusionLog を並行して実行すると、失敗したアセンブリ バインドが追跡されます。上記のように、このアセンブリがリフレクションを使用して既に読み込まれているため、実際にアセンブリを検索するのはなぜですか?!

EDIT-II: @Tuzo: あなたが投稿したすべての記事を読みました。そして、次のことを試しました:

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {

            AssemblyName asname = AssemblyName.GetAssemblyName(@"C:\xxxx\KM_Solution\Customer.DAL\bin\Debug\Customer.DAL.dll");                
            return Assembly.Load(asname);               

    }

しかし、私はまだ例外を受け取ります。AppDomain.CurrentDomain.GetAssemblies() を確認したところ、アセンブリを見つけることができましたが、それでも Unity が型を解決できないという例外がスローされます...

4

1 に答える 1