0

目前在我的winforms应用程序中,我所有的类型都在Main方法中注册。 我正在寻找解决方案我如何注册App.conf内的所有新类型? 这是可行的吗?C#Unity IOC在App.conf中注册新类型

这是我目前在我的应用程序中使用:

[STAThread] 
    static void Main(string[] args) 
    { 
     UnityContainer ioc = new UnityContainer(); 

     // This move in app.conf 
     ioc.RegisterType<Customer>(); 
     ioc.RegisterType<MainWindow>(); 
     ioc.RegisterType<IDatabase, MySqlDatabase>(); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(ioc.Resolve<MainWindow>()); 
    } 

回答

1

它可以注册内的app.config类型。我写了简单的控制台应用程序来说明:

using Microsoft.Practices.Unity; 
using Microsoft.Practices.Unity.Configuration; 

namespace MyNamespace 
{ 
    public interface ILogger 
    { } 

    public class TheLogger : ILogger 
    { } 

    class Program 
    { 
     private static void Main(string[] args) 
     { 
      IUnityContainer container = new UnityContainer(); 
      container.LoadConfiguration(); 

      var logger = container.Resolve<ILogger>(); 
     } 
    } 
} 

而且app.config中(TheLogger类被注册为ILogger的实现):

<?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"> 
    <namespace name="MyNamespace" /> 
    <assembly name="MyApp" /> 
    <container> 
     <register type="ILogger" mapTo="TheLogger" /> 
    </container> 
    </unity> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
</configuration> 

有关详情,请这个MSDN page

+0

谢谢我解决了我的问题。 – Ivan