0

Unityアプリブロックと呼ばれるDIフレームワークを初めて使用します。エラーが発生します。エラーは:-

タイプ名またはエイリアスILoggerを解決できませんでした。構成ファイルを確認し、このタイプ名を確認してください。

私は依存性を外部からメインプロジェクトに注入しようとしていました。依存関係によってどこにでもデータを保存したいとします。ファイルやコンソール、データベースなどにデータを保存したいとします。

ここでは、Unityを組み込むためのアプリを開発する方法について説明します。

まず、「Ilogger」というクラスライブラリプロジェクトを作成します。このプロジェクトにはインターフェイスが1つしかありません。このインターフェースの完全なコード

namespace Ilogger
{
    public interface ILog
    {
        void Write(string msg);
    }
}

次に、「ConsoleWriter」というクラスライブラリプロジェクトを作成します。このプロジェクトには、Iloggerインターフェイスを継承するクラスが1つしかないため、Iloggerプロジェクトの参照をConsoleWriterプロジェクトに追加するだけです。このConsoleWriterの完全なコード

namespace ConsoleWriter
{
    public class ConsoleWriter : Ilogger.ILog
    {
        #region ILog Members

        public void Write(string msg)
        {
            Console.WriteLine(msg);
            Console.ReadLine();
        }

        #endregion
    }
}

3番目のステップ「FileWriter」というクラスライブラリプロジェクトを作成します。これには、Iloggerインターフェイスを継承するクラスが1つしかないため、Iloggerプロジェクトの参照をFileWriterプロジェクトに追加するだけです。このFileWriterの完全なコード

namespace FileWriter
{
    public class FileWriter : Ilogger.ILog
    {
        #region IWriter Members

        public void Write(string msg)
        {
            using (StreamWriter streamWriter = new StreamWriter("c:\\TestUnity.txt", true))
            {
                streamWriter.WriteLine(msg);
            }
        }
        #endregion
    }
}

次に、実行時に依存関係を注入する場所からWinアプリを作成します。このプロジェクトでは、Unityブロックのdllリファレンスを追加します。

Microsoft.Practices.Unity
Microsoft.Practices.Unity.Configuration
system.configuration

app.configファイルを1つ追加すると、次のようなエントリがあります

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
    </configSections>

    <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <alias type="ILogger.ILog, ILogger" alias="ILogger" />
        <namespace name="ILogger.ILog"/>

        <container>
            <register mapTo="FileWriter.FileWriter, FileWriter" name="MyFileWriter" type="ILogger"/>
            <register mapTo="ConsoleWriter.ConsoleWriter, ConsoleWriter" name="MyConsoleWriter" type="ILogger"/>
        </container>
    </unity>

</configuration>

これがエラーがスローされるメインコードです

string strCountryCode = "USA";

    IDictionary<string, string> loggers = new Dictionary<string, string>();
    loggers.Add("USA", "MyFileWriter");
    loggers.Add("GBR", "MyConsoleWriter");

    IUnityContainer container = new UnityContainer();
    UnityConfigurationSection section = (UnityConfigurationSection)System.Configuration.ConfigurationManager.GetSection("unity");
    //container.LoadConfiguration();
    section.Containers.Default.Configure(container);

    Ilogger.ILog logger = container.Resolve<Ilogger.ILog>(loggers[strCountryCode]);
    logger.Write("Hello World");

この行はエラーを出しますsection.Containers.Default.Configure(container);

初めてDIフレームワークユニティを使用しているので、自分が犯した間違いを見つけることができません。だから誰かが私がエラーを取得するのを手伝って、それを修正する方法を教えてください。

ありがとう

4

1 に答える 1

0

いくつかの問題があるかもしれません。

  • Unity構成を読み取ろうとしているアプリケーションのエントリポイントで、ILogインターフェイスを含むアセンブリを追加する必要があります。アセンブリが欠落している可能性があります。

  • フルパスを使用してエイリアスを追加する必要があります。フルパスには、アセンブリ名を含める必要があります。

  • 正確な問題を観察するには、構成ファイルを使用する代わりに、コードに登録してみてください。

于 2013-01-21T09:36:20.007 に答える