私は .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 つ目の問題。あなたの助けは大歓迎です。