我需要有关 DI 的帮助,但我以前从未使用过 DI。所以概念对我来说是新的。我的问题是假设我需要将日志保存到数据库或平面文件,或者可能是 Windows 事件日志。基于几个参数,我想将日志数据保存到数据库或平面文件或事件日志
例如,如果国家代码是 GBR,那么事件日志将保存到 DB。如果国家代码是美国,那么事件日志将被保存到平面文件中。如果国家代码是美国,那么事件日志将被保存到 Windows 事件日志中。
我得到了一个类似的代码,它用 DI 模式实现了上述问题。这是代码
public interface ILog
{
void Log(string text);
}
然后在你的类中使用这个接口
public class SomeClass
{
[Dependency]
public ILog Log {get;set;}
}
在运行时注入这些依赖项
public class SomeClassFactory
{
public SomeClass Create()
{
var result = new SomeClass();
DependencyInjector.Inject(result);
return result;
}
}
并且实例在 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>
<typeAliases>
<typeAlias alias="singleton"
type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
</typeAliases>
<containers>
<container>
<types>
<type type="MyAssembly.ILog,MyAssembly"
mapTo="MyImplementations.SqlLog, MyImplementations">
<lifetime type="singleton"/>
</type>
</types>
</container>
</containers>
</unity>
</configuration>
但是上面这段代码的问题是它一次只能做一件事。如果程序集实现存在于 DB 中,那么它将保存到 DB 中,或者如果程序集实现存在于平面文件中,那么它将保存到平面文件中。
但我的要求是相同的,有点不同,比如我想根据国家代码保存数据。所以我需要更改代码和配置文件,因此我可以根据国家/地区代码将数据保存在任何地方。请帮助我的代码和概念。谢谢