0

私は .Net Technologies の初心者であり、Unity と WPF のテストとしてレイヤード アプリケーションから始めたいと考えていました。実行すると、次の例外が発生します: ConfigurationErrorsException : パラメータ mefRepository の値を構築するための有効な属性が見つかりませんでした。構成ファイルを確認してください。Unity 構成の下:

<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 Container を初期化する場所がわからないことです。ネットで多くのサンプルを見つけましたが、すべて Unity と WPF/MVVM パターンに関するものです。MefService クラスのコードが正しいように見えるため、エラーの原因が特定できないという 2 つ目の問題。あなたの助けは大歓迎です。

4

1 に答える 1

0

通常、アプリケーションの起動時にコンテナーを初期化します。

あなたが見ているエラーに関しては、以下は正しく見えません:

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

dependencyyName とdependencyyType は、綴りのタイプミスのため、有効な属性名ではありません。また、同じ名前のパラメーターを 2 つ持つのは間違っているようです。

于 2013-06-21T16:11:24.277 に答える