यहाँ एक छोटा सा उदाहरण मैं कैसे एकता का उपयोग करें और खाका 10.
1 है एक ViewModel
I लोगों की सूची बनाने के लिए एक डेटा सेवा वर्ग भी बनाया। [निर्भरता] एनोटेशन पर एक नज़र डालें।
public class UnityViewModel : ViewModelBase
{
public string HelloMessage { get; }
[Dependency]
public IDataService DataService { get; set; }
private IEnumerable<Person> people;
public IEnumerable<Person> People
{
get { return people; }
set { this.Set(ref people, value); }
}
public UnityViewModel()
{
HelloMessage = "Hello !";
}
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode,
IDictionary<string, object> suspensionState)
{
await Task.CompletedTask;
People = DataService.GetPeople();
}
}
2. बना सकते हैं और भरने के अपने UnityContainer
UnityViewModel और unityContainer को DataService जोड़ें एक कक्षा बनाएँ। UnityViewModel को हल करने के लिए एक संपत्ति बनाएं।
public class UnitiyLocator
{
private static readonly UnityContainer unityContainer;
static UnitiyLocator()
{
unityContainer = new UnityContainer();
unityContainer.RegisterType<UnityViewModel>();
unityContainer.RegisterType<IDataService, RuntimeDataService>();
}
public UnityViewModel UnityViewModel => unityContainer.Resolve<UnityViewModel>();
}
3. आपके ऐप पर UnityLocator जोड़ें।XAML
<common:BootStrapper x:Class="Template10UWP.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="using:Template10.Common"
xmlns:mvvmLightIoc="using:Template10UWP.Examples.MvvmLightIoc"
xmlns:unity="using:Template10UWP.Examples.Unity">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\Custom.xaml" />
<ResourceDictionary>
<unity:UnitiyLocator x:Key="UnityLocator" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<!-- custom resources go here -->
</ResourceDictionary>
</Application.Resources>
4. नियंत्रण के लिए DataContext के रूप में UnityViewModel गुण सेट और बाध्य करने के लिए पेज
उपयोग UnityLocator बनाएं
<Page
x:Class="Template10UWP.Examples.Unity.UnityMainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Template10UWP.Examples.Unity"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
DataContext="{Binding Source={StaticResource UnityLocator}, Path=UnityViewModel}"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding HelloMessage}" HorizontalAlignment="Center"
VerticalAlignment="Center" />
<ListBox Grid.Row="1" ItemsSource="{Binding People}" DisplayMemberPath="FullName">
</ListBox>
</Grid>
जब पेज UnityViewModel को हल करता है तो डेटा सेवा स्वचालित रूप से इंजेक्शन दी जाएगी।
अब आपके प्रश्नों
को इस तरह की परियोजनाओं के एक दूसरे पर निर्भर पर निर्भर करता है। मुझे यकीन नहीं है कि सबसे अच्छा समाधान क्या है, लेकिन मुझे लगता है कि मैं एक यूनिटीकंटनर का उपयोग करने की कोशिश करता हूं और इसे मूल पुस्तकालय में रखता हूं।
मुझे आशा है कि मेरे उदाहरण इस सवाल का जवाब
मुझे आशा है कि मेरे उदाहरण इस सवाल का जवाब
[आईओसी/DI के
स्रोत
2017-04-07 13:16:39
संभावित डुप्लिकेट - क्यों मैं सभी परतों को संदर्भित करने की क्या ज़रूरत है/प्रविष्टि में विधानसभाओं आवेदन?] (http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry- appplication) – NightOwl888