假设我有这样的界面和具体实现
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了MyConcrete实现strings,我可以有一个更具体的实现int.那没关系.但是,让我们说,我想做同样的事情,但使用通用方法,所以我有
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有相同的IMyInterface2,但它通过定义通用行为T My<T>().在我的具体类中,我想实现My行为,但对于具体的数据类型 - string.但C#不允许我这样做.
我的问题是为什么我不能这样做?换句话说,如果我可以创建MyInterface<T>as的具体实现MyClass : MyInterface<string>并在此时停止泛化,为什么我不能用泛型方法做到这一点 - T My<T>()?
我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.
我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_name和column_name,但我一直没能正确地写代码.
请不要向我推荐AuditDbContext - 实体框架审计上下文或EntityFramework.Extended工具,因为它们不能满足我的需要.
UPDATE
我CreatedDate是空的SaveChanges()因为我将ViewModel传递给我的视图,它正确地没有调用其中的审计属性CreatedDate.即使我将模型传递给我的视图,我也不会CreatedDate在视图中编辑或存储它.
我在这里读到我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这将告诉EF CreatedDate在插入和更新后正确存储,但不允许我的应用程序更改它:但我只是Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF通过添加此属性得到错误.
我即将切换到EF Model First,因为这个简单的数据库要求在Code First中实现是荒谬的.
entity-framework code-first ef-code-first ef-migrations entity-framework-5
在C#中,接口和类之间存在巨大差异.实际上,类表示引用类型,因此我们实际上可以创建在该类上建模的对象,而接口则是类签名的合同,以确保存在某种行为.特别是我们无法创建接口实例.
接口的全部意义在于暴露行为.类通过给出所述行为的一个显式实现来实现它.
在这种情况下,尽管接口可能包含属性,但由于行为问题,我们大多数时候都关心接口.所以大多数类型,接口只是行为契约.
另一方面,在TypeScript上,我看起来让我感到非常不安,事实上我不止一次看过这个,这就是这个问题的原因.
在一个教程中我看到了这个:
export interface User {
name: string; // required with minimum 5 chracters
address?: {
street?: string; // required
postcode?: string;
}
}
Run Code Online (Sandbox Code Playgroud)
但是等一下.为什么User是界面?如果我们认为像C#,User不应该是一个接口.事实上,看着它,似乎我们正在定义数据类型User,而不是行为契约.
像在C#中一样思考,自然就是这样:
export class User {
public name: string;
public address: Address;
}
export class Address {
public street: string;
public postcode: string;
}
Run Code Online (Sandbox Code Playgroud)
但是,像使用类一样使用接口来定义数据类型而不是定义行为契约这一点在TypeScript中似乎很常见.
那么TypeScript中的接口是什么意思?为什么人们在TypeScript中使用接口,就像我们在C#中使用clases一样?如何在TypeScript中正确使用接口:建立行为契约,或者定义属性和对象应该具有哪些?
老实说,我不敢相信这有多难......首先是我要求的要求:
IDesignTimeDbContextFactory,IDbContextFactory被重命名为开发人员不会混淆它的作用appsettings.json不止一次加载.一个原因是因为我的迁移是在域中运行的,MyClassLibrary.Data并且appsettings.js该类库中没有文件,我不得不这样做Copy to Output Directory appsettings.js.另一个原因是它不是很优雅.所以这就是我目前的工作方式:
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using AppContext = Tsl.Example.Data.AppContext;
namespace Tsl.Example
{
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<AppContext>
{
public AppContext CreateDbContext(string[] args)
{
string basePath = AppDomain.CurrentDomain.BaseDirectory;
string envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{envName}.json", true)
.Build();
var builder = new DbContextOptionsBuilder<AppContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseMySql(connectionString);
return new AppContext(builder.Options);
}
} …Run Code Online (Sandbox Code Playgroud) 将解决方案从Visual Studio 2010移动到2012后出现了一个令人讨厌的错误.构建很好,一切都运行完美localhost.我有一个新的MVC4项目需要.NET 4.5,所以我在构建服务器上安装了4.5框架.构建很好但是MSBuild无法将DotNetOpenAuth.Core.dll从其包位置复制到Bin目录.问题是因为,尽管特定项目的目标是4.0框架,但我相信MSBuild正在检查对.NET 4.5框架System.Net.Http程序集的依赖性,作为其CoreBuild的一部分.
警告代码="MSB3268"主要参考\ packages\DotNetOpenAuth.Core.4.3.0.13117\lib \net40-full\DotNetOpenAuth.Core.dll"无法解析,因为它对框架程序集具有间接依赖性"System.Net .Http,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"无法在当前目标框架中解析.".NETFramework,Version = v4.0".要解决此问题,请删除引用"c :\ cc\kazork\code\trunk\src\packages\DotNetOpenAuth.Core.4.3.0.13117\lib \net40-full\DotNetOpenAuth.Core.dll"或将您的应用程序重新定位到包含"System.Net.Http的框架版本,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a
这是我的包配置:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ChardinJs" version="1.0.3" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="DotNetOpenAuth.AspNet" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OAuth.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OpenId.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.3.0.13117" targetFramework="net40" />
<package id="EntityFramework" version="5.0.0" targetFramework="net40" />
<package id="flexigrid" version="1.1.0" targetFramework="net40" …Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
"The breakpoint will not currently be hit. A copy of TokenController.cs was found in TSL.Security.Service.dll, but the current source code is different from the version built into the TSL.Security.Service.dll."
Run Code Online (Sandbox Code Playgroud)
我将逐步了解如何构建我的.NET Core Docker镜像并从此图像运行Container实例,然后使用Visual Studio 2017连接远程,我的Dockerfile.debug位于我的问题的底部:
cd ~/repos/api.security//一个git存储库git pull //从git for .NET Core项目中提取最新代码dotnet restoredotnet publish //没有其他args与.pdbs一起发布docker build -t tsl.api.security.image.debug -f Docker.debug .docker run -d -p 8080:5000 -p 10222:22 --name=tsl.api.security.container.debug -t tsl.api.security.image.debug //在端口5000上的Container中运行并映射我的.NET Core Webapi到主机端口8080并将容器(端口22)中的ssh映射到主机上的端口10222 …我想从IIS而不是IIS Express运行,因为我有一个指向我的机器的外部IP,我将从外部源接收消息.最终我将使用WebAPI但是为了测试和设置IIS,我使用的是一个简单的ASP.NET MVC 5 Web应用程序.
我创建了一个新的ASP.NET MVC 5 Web应用程序,这是Visual Studio 2015 MVC模板的框架,然后我使用IIS Express运行应用程序,没有问题:
然后我去了IIS 10并创建了一个以"localhost"作为绑定的新网站:
IIS中这个新网站的物理路径是C:\inetpub\wwwroot\AspNetMvcTest:
然后我转到Web应用程序属性并切换到IIS.有人问我是否要创建一个新的虚拟目录:
我单击是,如果单击否,操作将被取消,并且您未保存Web应用程序属性.您必须单击是以更改为Visual Studio中的本地IIS属性.
然后我被告知IIS"localhost"被映射到一个不同的文件夹,我想重新映射:
我点击了是.如果单击" 否",则将再次保留未保存的Web应用程序属性,并且不会在Visual Studio中使用本地IIS.
这是有趣的Visual Studio正在尝试更改"虚拟目录",因为它将实际更改IIS网站的物理路径而不是添加虚拟目录.虚拟目录是一个文件夹,位于IIS网站的物理路径之外,IIS将视为物理路径文件夹的一部分.但我离题了.
现在我被告知"虚拟目录"已成功创建:
现在我们来看看Visual Studio 2015对IIS 10所做的更改:
我们在绑定到localhost的网站上没有虚拟目录:
我的物理路径已被Visual Studio 2015更改,并映射到我的简单ASP.NET MVC 5 Web应用程序所在的目录:
因此,即使Visual Studio 2015在更改ASP.NET MVC 5 Web应用程序属性时使用"虚拟目录",Visual Studio 2015也只关注物理路径,这是我在IIS中可以看到的唯一改变.
现在为内部服务器错误500详细信息
我在Visual Studio 2015中按F5,F12工具说有一个内部服务器500错误:
如果我们在Fiddler中检查请求和响应,则500错误的内容长度= 0
为了尝试获取500错误的更多细节,我在Web.Config中关闭了自定义错误,并添加了httpErrors Detailed和PassThrough:
我向Global.asax添加了"catch all"异常处理,没有断点命中
:
这是我的调用堆栈,它是空的,屏幕截图中的断点都没有被击中:
我在我的解决方案中添加了一个控制台应用程序作为"设置为启动项目",这是我的调用堆栈,证明可以点击一个断点:
这是事件查看器 - >应用程序的屏幕截图,我清除了应用程序日志,在Visual Studio …
我想配置一个RexEx来匹配任何打开文件的文件路径的任何文件夹(父或子).因此,如果文件路径中的任何文件夹包含打开文件的名称,则选项卡的颜色编码将根据RegEx匹配进行设置.
例如:websiteRoot/Content/MyName1/site.css =文件打开时的绿色标签
websiteRoot/Content/MyName2/site.css =文件打开时的橙色标签
打开文件时,websiste/Shared/MasterPages/MyName1/main.master =绿色标签
websiste/Shared/MasterPages/MyName2/main.master =文件打开时的橙色标签
我试过了:
.*MyName1?$但这只是看我认为的文件名.
还尝试过.*//MyName1//?$,如果此扩展的Regex在打开的文件路径上直接匹配,我认为下一个可以做到这一点:^.*\\MyName1
更有希望的正则表达式没有成功:
.*websiteRootPath.*MyName1|myname1|myName1
Run Code Online (Sandbox Code Playgroud)
如果Power Productivity Tools处理打开文件的相对路径:
.*MyName1|myname1|myName1
Run Code Online (Sandbox Code Playgroud) 我希望我的ApplicationContext构造函数具有UserManageras参数但是依赖注入有问题.
码:
public class ApplicationContext : IdentityDbContext<ApplicationUser>
{
private IHttpContextAccessor _contextAccessor { get; set; }
public ApplicationUser ApplicationUser { get; set; }
private UserManager<ApplicationUser> _userManager;
public ApplicationContext(DbContextOptions<ApplicationContext> options, IHttpContextAccessor contextAccessor, UserManager<ApplicationUser> userManager)
: base(options)
{
_contextAccessor = contextAccessor;
var user = _contextAccessor.HttpContext.User;
_userManager = userManager;
ApplicationUser = _userManager.Users.FirstOrDefault(u => u.Id == _userManager.GetUserId(user));
}
}
Run Code Online (Sandbox Code Playgroud)
在startup.cs中
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("RCI.App")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>()
.AddDefaultTokenProviders();
services.AddAuthentication();
services.AddMvc(); …Run Code Online (Sandbox Code Playgroud) c# dependency-injection circular-dependency asp.net-core-mvc asp.net-core
注意事项:
func captureOutput(captureOutput: AVCaptureOutput, didOutputSampleBuffer sampleBuffer: CMSampleBufferRef, fromConnection connection: AVCaptureConnection)CmSampleBufferRefs提交.这包括使用NSData,它永远不会将有效的.caf存储到文件中.以下代码成功启动了音频和视频AVCaptureSession,AVCaptureSession委托func captureOutput(captureOutput: AVCaptureOutput, didOutputSampleBuffer sampleBuffer: CMSampleBufferRef, fromConnection connection: AVCaptureConnection)正在为音频和视频调用.当一个.提供音频CMSampleBufferRef示例我试图将该示例转换为AudioBuffer并传递给Aubio方法aubio_onset_do.我正在使用单例aubio_onset COpaquePointer.
在这段代码中,我尝试用两种不同的方式用音频缓冲区数据调用aubio_onset_do.
let useTimerAndNSMutableData = false.这意味着在我的prepareAudioBuffer函数中我将audioBuffer.mData传递给sampleAudioForOnsets.这种方法永远不会失败,但也没有检测到任何启动,我怀疑因为样本量不够大.方法2如果let useTimerAndNSMutableData = true我sampleAudioForOnsets每隔1秒调用一次最终调用,允许有时间使用AudioBuffer.mDatas构建NSMutableData.使用这种方法,我试图给aubio_onset_do一个足够大的样本来检测onsets,使用一个计时器和NSMutableData这个方法导致aubio_onset_do很快崩溃:
(EXC_BAD_ACCESS(code = 1))
import UIKit
import AVFoundation
class …Run Code Online (Sandbox Code Playgroud)c# ×6
.net ×3
asp.net ×3
asp.net-core ×2
asp.net-mvc ×2
.net-core ×1
aubio ×1
audio ×1
clr ×1
code-first ×1
docker ×1
iis ×1
interface ×1
ios ×1
javascript ×1
linux ×1
msbuild ×1
objective-c ×1
swift ×1
typescript ×1