- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您编写自己的 MarkupExtension
,您可能会偶然发现 IServiceProvider serviceProvider
参数在设计时与运行时不同。例如,您无法获取 IRootObjectProvider
。那么是否有关于参数对象实现哪些接口(interface)
的文档,是否有任何解决方法来获取根对象?
最佳答案
写了一个小 helper 来查看有哪些服务可用:
public class ServiceExtension : MarkupExtension
{
public ServiceExtension()
{
}
public ServiceExtension(Type serviceType)
{
ServiceType = serviceType;
}
[ConstructorArgument("serviceType")]
public Type ServiceType { get; set; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public object Service { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (ServiceType == null)
{
Service= "ServiceType == null";
return this;
}
var service = serviceProvider.GetService(ServiceType);
Service= service ?? "null";
return this;
}
}
<Style TargetType="{x:Type HeaderedContentControl}">
<Setter Property="Header" Value="{Binding ServiceType}" />
<Setter Property="Content" Value="{Binding Service}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Col1" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0"
Margin="0,0,5,0"
ContentSource="Header" />
<ContentPresenter Grid.Column="1" ContentSource="Content" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ItemsControl Grid.IsSharedSizeScope="True">
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IXamlNameProvider}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IXamlNameResolver}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type x:IProvideValueTarget}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type x:IXamlTypeResolver}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type x:IValueSerializerContext}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type componentModel:ITypeDescriptorContext}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IDestinationTypeProvider}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IXamlNamespaceResolver}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IXamlSchemaContextProvider}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IRootObjectProvider}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type x:IUriContext}}" />
<HeaderedContentControl DataContext="{local:Service {x:Type xaml:IAmbientProvider}}" />
</ItemsControl>
关于c# - 设计时的 MarkupExtension.ProvideValue(IServiceProvider serviceProvider),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428384/
在 .NET Core Console 应用程序中,我想使用内置的依赖注入(inject),包括自动处理链中的 IDisposable 对象。在 ASP.NET Core 中,对象是随每个请求创建和释
我有一个关于 Laravel 的问题。使用ServiceProviders的区别在哪里?或 Middleware在 Laravel 中? 所以我的意思是,我什么时候使用 ServiceProvider
我创建了这个提供程序: php artisan make:provider ShortcodesServiceProvider 然后我不得不删除该文件,但现在我得到了 FatalThrowableEr
我正在权衡在独立包中测试我的 ServiceProvider 的利弊。 由于 laravel 应用程序不是包的依赖项,我认为我不应该/不能编写集成测试。 但有时我在使用语句中出现拼写错误,导致我只为这
我正在使用这种方法构建服务实现: 我正在使用 Microsoft.Extensions.DependencyInjection 并尝试实现以下目标: 创建本地 ServiceCollection 并保
文件:Composer.json --------------------------------------- { "name": "laravel/laravel",
我有asp.net 核心应用程序。我将 Options 存储在 appsettings.json 文件中。我向服务注册了 Options,然后尝试在 Configure 方法中解决它。 但是服务提供商
设置:在我们公司,我尝试将基于 Ant 的 Netbeans 应用程序迁移到 Maven。我有一个基于 Maven 的 Netbeans 平台应用程序和两个包含 Netbeans 模块的 Maven
我觉得我已经搜索了整个互联网,但似乎无法弄清楚这个问题。我正在使用 Silex(最新版本),似乎无法弄清楚如何使用 Silex 的 ServiceProvider 系统返回一个类的实例以供使用。 我确
所以我有一个 Laravel 服务提供者,我想在应用它时创建一个 DEBUG 日志条目: app['log']->debug('message'); //fails too } } 如何做到这
如果您编写自己的 MarkupExtension,您可能会偶然发现 IServiceProvider serviceProvider 参数在设计时与运行时不同。例如,您无法获取 IRootObject
我为 paypal 创建了一个自定义服务提供商。当我尝试从提供者内部访问配置时,它返回 null。 下面是我写的代码。 public function register() { $this->
我正在用 Laravel 编写一个小 API,部分目的是为了学习这个框架。我想我在文档中发现了一个漏洞,但这可能是因为我不理解“Laravel 方式”来做我想做的事。 我正在编写一个 HTTP API
我正在研究 Laravel 5.2 中的 api 部分,并尝试从 Strava 获取详细信息。正如此链接中提到的 http://socialiteproviders.github.io/provide
我是 PHP 和 Laravel 的新手。我按照本教程将 reCAPTCHA 支持添加到我的 Laravel 应用程序中的页面: http://tutsnare.com/how-to-use-capt
我在 .NET 4.6.2 上有一个 Windows 服务,我在其中使用 .NET ServiceProvider(System.IServiceProvider 接口(interface))将 EF
我想改变路由的路径,但它仍然给出错误 Class HomeController does not exist 下面是我的代码 In app/Http/routes.php page Route::ge
有什么好办法可以拿到ServiceProvider在 AddOpenIdConnect , 或 稍后在我们完全设置 DI 容器的地方配置 ClientSecret? (例如在 Configure(IA
我编写了一个 aspnet core 控制台应用程序,该应用程序将 Entity Framework Core 与 SQL Server 结合使用。该应用程序有多个 Azure 服务总线队列客户端,我
friend 们大家好,我是 Laravel 框架的新手。 我在应用程序文件夹中创建模块目录。 然后我还在模块目录中创建 ServiceProvider.php 文件。 我的文件结构如下。 app\m
我是一名优秀的程序员,十分优秀!