我正在努力开始团结,我正在寻找这个特殊问题的帮助: 我已经了解了依赖注入/统一是什么以及如何以编程方式执行此操作但我不明白当成员使用依赖项属性标记时如何/何时填充。
class Program
{
static Program()
{
uContainer = new UnityContainer();
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(uContainer);
}
private static IUnityContainer uContainer;
[InjectionMethod]
public static void InjectTrace(ITraceManager traceManager)
{
trace = traceManager;
}
[Dependency]
public static ITraceManager trace { get; set; }// = /*new WebTraceManager("C:\\","trace",true);//*/new EnterpriseLibaryLoggingWrapper(false);
static void Main(string[] args)
{
//Programmatically inject dependency
// TODO: Do this via attributes
//UnityContainer myContainer = new UnityContainer();
//UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
//section.Containers["containerOne"].Configure(myContainer);
//trace = myContainer.Resolve<ITraceManager>();
trace.ProgramStatus("Start");
trace.ProgramStatus("End");
Console.ReadLine();
}
}
Main中以编程方式设置trace属性的未注释部分正常工作。但是使用属性“Dependency”将不会填充该属性。 是否缺少对统一容器的调用? 谢谢你的帮助。
根据Steve的建议,我改变了示例,使用实例而不是静态类:
static Program()
{
uContainer = new UnityContainer();
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(uContainer);
Instance = uContainer.Resolve<Program>();
}
Program(ITraceManager traceManager)
{
trace = traceManager;
}
static readonly Program Instance;
//Do not use Dependency Attribute
//[Dependency]
public ITraceManager trace { get; set; }// = /*new WebTraceManager("C:\\","trace",true);//*/new EnterpriseLibaryLoggingWrapper(false);
static void Main(string[] args)
{
Instance.Run();
}
void Run()
{
trace.ProgramStatus("Start");
trace.ProgramStatus("End");
Console.ReadLine();
}
但是在打电话时
Instance = uContainer.Resolve<Program>();
,我接到一个例外,告诉我,该程序未在容器中注册。这是真的,但不应该 Unity通过已知类型的程序代码返回已解决的依赖项而不是? 我在网上找到的例子总是像这样使用构造函数注入
IUnityContainer uContainer = new UnityContainer();
MyObject myInstance = uContainer.Resolve<MyObject>();
我终于发现了注入构造函数示例的问题,当然构造函数必须是PUBLIC。异常消息让我有点困惑。
答案 0 :(得分:7)
几点: