1

次のインターフェースと実装があります

namespace ProjectName.Web
{
    public interface IWebUtil
    {        
    }
}


namespace ProjectName.Web
{
    public class WebUtil : IWebUtil
    {                
    }
}

私の設定では、この登録があります。Unity3を使用しています。

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <assembly name="ProjectName.Web" />
  ...
   <register name="WebUtil" type="ProjectName.Web.IWebUtil" mapTo="ProjectName.Web.WebUtil">
     <lifetime type="transient" />    
   </register>
  ...

この構成を解決しようとすると、次のエラーが発生します。

Exception is: InvalidOperationException - The type IWebUtil does not have an accessible       constructor.
-----------------------------------------------
At the time of the exception, the container was:
Resolving ProjectName.Web.IWebUtil,(none)

空のパブリック コンストラクターを追加しようとしましたが、成功しませんでした。

誰でもこれを手伝ってもらえますか?ありがとう。

4

1 に答える 1

2

最初のステップは、デフォルトでは行われないため、Unity 構成をロードしていることを確認することです。これをする:

using Microsoft.Practices.Unity.Configuration;

container.LoadConfiguration();

私はあなたがこれをしたと仮定しています。また、次のコードを使用して IWebUtil を解決しようとしていると仮定します。

container.Resolve<IWebUtil>();

これは、IWebUtil が名前付き登録 (名前は「WebUtil」) として構成されているため、InvalidOperationException をスローします。したがって、構成された名前を使用して解決します。

container.Resolve<IWebUtil>("WebUtil");

または、登録をデフォルトの (名前のない) 登録に変更します。

<register name="" type="ProjectName.Web.IWebUtil" mapTo="ProjectName.Web.WebUtil">
 <lifetime type="transient" />    
</register>
于 2013-09-30T13:57:08.433 に答える