2013-06-21 59 views
0

我是.Net技術中的新成員,我想從分層應用程序開始作爲Unity和WPF的測試。當執行我得到下面的異常:ConfigurationErrorsException: 沒有發現有效的屬性來構造參數mefRepository的值 請檢查配置文件。下面的統一配置:在分層應用程序中使用MS Unity DI容器和WPF

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
<typeAliases> 
<typeAlias alias="IUnitOfWork" type="DDDTest.Domain.Core.IUnitOfWork,DDDTest.Domain.Core"/> 
    <typeAlias alias="UnitOfWork"  type="DDDTest.Infrastructure.Data.MainModule.UnitOfWork,DDDTest.Infrastructure.Data.MainModule"/> 
    <typeAlias alias="IRepository" type="DDDTest.Domain.Core.IRepository,DDDTest.Domain.Core"/> 
    <typeAlias alias="Repository"  type="DDDTest.Infrastructure.Data.MainModule.Repository,DDDTest.Infrastructure.Data.MainModule"/> 
    <typeAlias alias="IMefRepository" type="DDDTest.Domain.MainModule.Entities.IMefRepository,DDDTest.Domain.MainModule.Entities"/> 
    <typeAlias alias="MefRepository" type="DDDTest.Infrastructure.Data.MainModule.Repositories.MefRepository,DDDTest.Infrastructure.Data.MainModule.Repositories"/> 
    <typeAlias alias="IMefService" type="DDDTest.Domain.MainModule.Services.IMefService,DDDTest.Domain.MainModule.Services"/> 
    <typeAlias alias="MefService"  type="DDDTest.Domain.MainModule.Services.MefService,DDDTest.Domain.MainModule.Services"/> 
    </typeAliases> 
    <container> 
    <register type ="IUnitOfWork"  mapTo="UnitOfWork" name="UoW"/> 
    <register type="IRepository"  mapTo="Repository"> 
    <constructor> 
     <param name="uow" dependencyName="UoW"/> 
    </constructor> 
    </register> 
    <register type ="IMefRepository" mapTo="MefRepository" name="MefRepo"/> 
    <register type ="IMefService"  mapTo="MefService"> 
    <constructor> 
     <param name="mefRepository" dependenceyName="MefRepo"/> 
     <param name="mefRepository" dependenceyType="MefRepository"/> 
     </constructor> 
     </register> 
     </container> 
    </unity> 

而且MefService類如下:

namespace DDDTest.Domain.MainModule.Services 
{ 
public class MefService : IMefService, IDisposable 
{ 
    IMefRepository _mefRepo; 

    public MefService(IMefRepository mefRepository) 
    { 
     _mefRepo = mefRepository; 

    } 


    //Add New Mef 
    public void AddMef(misfor _mef) 
    { 
     _mefRepo.Add(_mef); 
    } 

    //Delete a mef 
    public void DeleteMef(misfor _mef) 
    { 
     _mefRepo.Remove(_mef); 
    } 

    //Get a new empty mef 
    public misfor GetNewObject() 
    { 
     return _mefRepo.GetNewEmpty(); 
    } 

    //Find Mef By Primary Key 
    public misfor GetById(string ctr, short mef) 
    { 
     return _mefRepo.GetById(ctr, mef); 
    } 

    public void Dispose() 
    { 
     _mefRepo = null; 
    } 

} 

}

和WPF窗口如下:

namespace DDDTest.Presentation.MainModule 
{ 
/// <summary> 
/// Logique d'interaction pour MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 

    IMefRepository _mr; 
    MefService _ms; 
    misfor _currentMef; 

    public IUnityContainer unityContainer; 

    public MainWindow() 
    { 
     InitializeComponent(); 

    } 


    //Initialisation du container unity pour l'injection des dépendances 
    public void InitIocContainer() 
    { 
     unityContainer = new UnityContainer(); 
     unityContainer.LoadConfiguration(); 

    } 



    private void MefCode_KeyDown(object sender, KeyEventArgs e) 
    { 
     string c = txctrCode.Text; 
     short m = short.Parse(txMefCode.Text); 

     if (e.Key == Key.Enter) 
     { 

      _currentMef = _ms.GetById(c, m); 
       if (_currentMef != null) 
        grdMaster.DataContext = _currentMef; 
       else 
        MessageBox.Show("Mise en force introuvable.", "Erreur", MessageBoxButton.OK, MessageBoxImage.Error); 

     } 

    } 



    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     InitIocContainer(); 

     _ms = new MefService(_mr); 

     _currentMef = _ms.GetNewObject(); 
     grdMaster.DataContext = _currentMef; 

    } 
    } 
    } 

的第一個問題是,我不知道在哪裏初始化Unity容器。我在網絡中發現了很多樣本​​,但都是關於Unity和WPF/MVVM模式的。 第二個問題,我找不到錯誤的起源,因爲MefService類的代碼似乎是正確的。 歡迎您提供幫助。

回答

0

通常你會在應用程序啓動時初始化容器。

在你看到以下不看更正錯誤的條款:

<register type ="IMefService"  mapTo="MefService"> 
    <constructor> 
    <param name="mefRepository" dependenceyName="MefRepo"/> 
    <param name="mefRepository" dependenceyType="MefRepository"/> 
    </constructor> 
</register> 

dependenceyName和dependenceyType不是有效的屬性名稱由於拼寫錯別字。另外,具有相同名稱的兩個參數似乎是錯誤的。

相關問題