C# 有关使用Unity应用程序块依赖项注入的问题
我是第一次使用任何名为unity app block的DI框架。我犯了一个错误。错误是:- 无法解析类型名或别名ILogger。请检查您的配置文件并验证此类型名称。 我试图将依赖性从外部注入到我的主要项目中。假设我想通过依赖关系将数据保存到任意位置。假设我想将数据保存到文件或控制台、数据库等 在这里,我要告诉你我是如何开发我的应用程序来整合Unity的 首先,我创建了一个名为“Ilogger”的类库项目,它只有一个接口。此接口的完整代码C# 有关使用Unity应用程序块依赖项注入的问题,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我是第一次使用任何名为unity app block的DI框架。我犯了一个错误。错误是:- 无法解析类型名或别名ILogger。请检查您的配置文件并验证此类型名称。 我试图将依赖性从外部注入到我的主要项目中。假设我想通过依赖关系将数据保存到任意位置。假设我想将数据保存到文件或控制台、数据库等 在这里,我要告诉你我是如何开发我的应用程序来整合Unity的 首先,我创建了一个名为“Ilogger”的类库项目,它只有一个接口。此接口的完整代码 namespace Ilogger { publi
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
}
}
第三步,我创建一个名为“FileWriter”的类库项目
“它只有一个继承Ilogger接口的类。所以我只是将Ilogger项目的引用添加到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应用程序,在运行时从中注入dependecy。在这个项目中,我添加了一些unity块的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>
下面是引发错误的主代码
字符串strCountryCode=“USA”
IDictionary loggers=new Dictionary();
添加(“美国”、“MyFileWriter”);
添加(“GBR”、“MyConsolleWriter”);
IUnityContainer容器=新的UnityContainer();
UnityConfiguration节=(UnityConfiguration节)System.Configuration.ConfigurationManager.GetSection(“unity”);
//container.LoadConfiguration();
节.Containers.Default.Configure(容器);
Ilogger.ILog logger=container.Resolve(记录器[strCountryCode]);
logger.Write(“你好世界”);
此行给出错误节.Containers.Default.Configure(container)代码>
我第一次使用DI框架unity,所以我不能理解我犯了什么错误。所以,请任何人帮助我获得错误,并告诉我如何修复它
谢谢可能有几个问题
- 在应用程序的入口点,您正在尝试读取unity配置,您需要添加包含
ILog
接口的程序集;组件可能丢失
- 您需要使用完整路径添加别名;完整路径需要包含程序集名称
- 为了观察确切的问题,请尝试在代码中注册,而不是使用配置文件
我发现并解决了这个问题。请您用示例代码指导我如何在没有配置文件的情况下使用unity。谢谢什么问题?有关配置unity的信息,请参阅…配置文件中存在问题。
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");