关于使用Unity应用程序块依赖注入的问题

时间:2013-01-21 09:28:10

标签: c# dependency-injection unity-container

我第一次使用任何名为unity app block的DI框架。我收到了错误。错误是: -

无法解析类型名称或别名ILogger。请检查您的配置文件并验证此类型名称。

我正在尝试将依赖从外侧注入我的主要项目。假设我想通过依赖将数据保存到任何地方。假设我想将数据保存到文件或控制台,数据库等。

在这里,我告诉你我如何开发我的应用程序以合并Unity。

首先我创建一个名为“Ilogger”的类库项目,它只有一个接口。该界面的完整代码

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

其次我创建了一个名为“ConsoleWriter”的类库项目,它只有一个继承Ilogger接口的类。所以我只是将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接口的类。所以我只是将Ilogger项目的引用添加到FileWriter proj中。这个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应用程序。在这个项目中我添加了一些统一块的dll参考,那些是。

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

我添加了一个app.config文件,它的条目如

<?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框架统一,所以我无法捕捉到我犯的错误。所以请任何人帮我解决错误并告诉我如何修复它。

感谢

1 个答案:

答案 0 :(得分:0)

可能有几个问题;

  • 在应用程序的入口点,您尝试读取单元配置,您需要添加包含ILog接口的程序集;装配可能会丢失。

  • 您需要使用完整路径添加别名;完整路径需要包含程序集名称。

  • 为了观察确切的问题,请尝试在代码中进行注册,而不是使用配置文件。