2016-05-23 2 views
0

Все подходы к экспонированию данных времени разработки, которые я видел, состоят в создании двух ViewModels. Один для Design-Time и второй для среды исполнения.IOC и поддержка времени разработки в WPF

Но я чувствую, что это глупо. Зачем мне дублировать код? Почему я не могу полагаться на контейнер IoC, если я уже использую его в приложении?

Я просто хочу составить свой IoC во время разработки в нужное время, прежде чем WpfDesigner попытается разрешить соответствующий ViewModel.

Так что нам нужен способ инициализации на уровне сборки. Я нашел this thread on stackoverflow.

К сожалению, кажется, что, добавив следующий код в AssemblyInfo.cs не работает:

[assembly: DesignTimeBootstrapper] 
[AttributeUsage(AttributeTargets.Assembly)] 
class DesignTimeBootstrapperAttribute : Attribute { 
    public DesignTimeBootstrapperAttribute() { 
     File.AppendAllLines(@"F:\tmp\DesignTimeDebug.txt", new[] { "DesignTimeBootstrapperAttribute" }); 
     var dep = new DependencyObject(); 
     if (DesignerProperties.GetIsInDesignMode(dep)) { 
      Bootstrapper b = new Bootstrapper(); 
      b.Start(); 
     } 
    } 
} 

Я не вижу, что этот код никогда не называется.

ответ

0

вы можете упростить инициализацию, основываясь на режиме, используя DesingerProperties

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     if(DesignerProperties.GetIsInDesignMode(this)) 
     { 
      DataContext = new ViewModelBase(); 
     } 
     else 
     { 
      DataContext = new ViewModelBase(param1, param2); 
     } 
     InitializeComponent(); 
    } 
} 
Смежные вопросы