1 enterprise-library dependency-injection unity-container
我正在努力开始团结,我正在寻找这个特殊问题的帮助:我已经了解了依赖注入/统一是什么以及如何以编程方式执行此操作但我不明白当成员填充时如何/何时填充标有Dependency-Attribute.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
但是在打电话时
Instance = uContainer.Resolve<Program>();
Run Code Online (Sandbox Code Playgroud)
,我接到一个例外告诉我,该程序未在容器内注册.这是真的,但是Unity不应该通过已知类型的程序代码返回已解决的依赖项吗?我在网上找到的例子总是像这样使用构造函数注入
IUnityContainer uContainer = new UnityContainer();
MyObject myInstance = uContainer.Resolve<MyObject>();
Run Code Online (Sandbox Code Playgroud)
我终于发现了注入构造函数示例的问题,当然构造函数必须是PUBLIC.异常消息让我有点困惑.
归档时间: |
|
查看次数: |
2955 次 |
最近记录: |