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