我是.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容器。我在网上发现了很多样本,但都是关于Unity和WPF / MVVM模式的。 第二个问题,我无法找到错误的起源,因为MefService类的代码似乎是正确的。 欢迎您的帮助。
答案 0 :(得分:0)
通常您会在应用程序启动时初始化容器。
就错误而言,您会发现以下内容看起来不正确:
<register type ="IMefService" mapTo="MefService">
<constructor>
<param name="mefRepository" dependenceyName="MefRepo"/>
<param name="mefRepository" dependenceyType="MefRepository"/>
</constructor>
</register>
由于拼写错别字,dependencyyName和dependenceyType不是有效的属性名称。另外,有两个具有相同名称的参数似乎是错误的。