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