这已经毁了我几天的生命,有时间问...
我正在为我的应用程序使用Entity Framework 4.0.
位置(如房屋或办公室)有一个或多个设施(如浴室,卧室,斯诺克台等).
我想在位置页面上显示一个复选框列表,其中包含设施的复选框列表,并检查该位置当前具有的列表.
我的设施模型就像这样......
public class FacilityViewItem
{
public int Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,当我将位置视图模型传递给UI时,我想传递List<T>其中T属于FacilityViewItem类型的设施.
为了获得该位置已经具有的设施很简单 - 我使用Location.Facilities进行查询,返回一个EntityCollection,其中T是Facility类型.这是因为设施是导航属性....
var facs = from f in location.Facilities
select new FacilityViewItem()
{
Id = f.FacilityId,
Name = f.Name,
Checked = true
};
Run Code Online (Sandbox Code Playgroud)
所以这就是我的问题所在 - 我想要其他设施,那些位置没有.
我尝试过使用Except()和Any()和Contains(),但是我得到了同样的错误.
不起作用的查询示例......
var restOfFacilities = from f in ctx.Facilities
where !hasFacilities.Contains(f)
select new FacilityViewItem()
{
Id = …Run Code Online (Sandbox Code Playgroud) 我无法将服务注入Angular 4.x中的另一个服务并收到错误: Error: No provider for SkillsService!
我创建了一个repo来重现这个错误.您可以通过克隆repo本地运行它,只需ng test从repo根目录运行.
我采取的步骤......
ng newng g service contactng g service skillsng test并收到错误:Error: No provider for SkillsService!如何为SkillsService的ContactService添加提供程序?
似乎它必须是非常简单的东西,但它很难从文档和搜索中解决.
我刚刚将我的网站的测试副本升级到asp.net 4.0并注意到一个奇怪的问题,只有在我将网站上传到我的服务器时才会出现.
该站点有一个返回json的asmx Web服务,但当我在我的服务器上运行该站点时,它返回xml.它已经在asp.net 3.5中运行了一年多.
webMethod用正确的属性装饰......
[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<LocationRecentChange> RecentChanges()
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上它返回json.
然而在服务器(Windows 2008 64位)上它返回xml.
使用firebug控制台,你会看到200 OK响应和一堆XML,在我的本地机器上返回的数据是我期望的JSON.
这是调用服务的JavaScript.
function loadRecentData() {
$.ajax({
type: "POST",
url: "service/spots.asmx/RecentChanges",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: loadRecentUpdates,
failure: function(msg) {
//alert(msg);
}
});
Run Code Online (Sandbox Code Playgroud)
}
欢迎任何建议,这让我难过!
当我在TFS 2010中从主线创建分支时,我必须下载我刚刚分支的所有代码.
我的笔记本电脑上已经有最新的主线版本了,为什么TFS要求我有效地下载硬盘上已有的内容?
即使我将主线文件复制到一个文件夹并将新分支映射到该文件夹,它仍然执行完全递归获取并将我们的带宽扼杀30分钟左右.
这似乎是浪费时间和带宽 - 是他们的解决方法/程序,我不知道?
Asp.Net v4 Webforms App依赖于Windows.Azure.Storage.如果我使用WebDeploy将其部署到Azure网站,这一切都可以正常工作.
现在我想在我的bitbucket repo中使用一个分支,让它从源代码控制中自动部署.
我设置了分支,将azure链接到它,然后触发部署.
但它失败了,这是在Azure日志中...
D:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5):警告MSB3245:无法解析此引用.无法找到程序集"Microsoft.WindowsAzure.Storage,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.[C:\ DWASFiles \网站\ KDB\VirtualDirectory0 \站点\库\ Pfv.Kdb.UI\Kdb.UI.csproj]
Nuget启用了包恢复,我检查了nuget.targets以确保将DownloadNugetExe条件设置为true.
为什么它没有引入nuget依赖?
我已经使用sourcegear vault和subversion/visual svn了很长一段时间,并且是CVS断开连接样式"编辑 - >合并 - >提交"使用源代码控制方式的忠实粉丝.
自从我们搬到TFS 2010后,我又被重新引入了可怕的"结账 - >编辑 - >签入"源安全风格的工作方式.意味着任何时候只有一个用户可以处理文件.
我找不到任何暗示可以改变的东西.
可能吗?
笔者提供了一个例子说明如何使用MediatR使用Autofac一个控制台应用程序:
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof (IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof (Ping).Assembly).AsImplementedInterfaces();
builder.RegisterInstance(Console.Out).As<TextWriter>();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(builder.Build()));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
Run Code Online (Sandbox Code Playgroud)
我拿了这个例子并尝试使用ASP MVC 5和Autofac.Mvc5包:
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof(IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(AddPostCommand).Assembly).AsImplementedInterfaces();
builder.RegisterControllers(typeof(HomeController).Assembly);
var container = builder.Build();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(container));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)
当我运行Web应用程序时,我得到一个错误页面,告诉我ServiceLocationProvider依赖项尚未注册.我究竟做错了什么?
我怀疑这个问题是由于我在调用 …
我有一个引用ADAL.net库的ac#控制台应用程序(Microsoft.IdentityModel.Clients.ActiveDirectory版本2.19.208020213)
控制台应用程序的目的是使用受ADFS保护的HTTP终结点。
ADFS auth的实现如下。
var uc = new UserCredential("user", "password");
var ctx = new AuthenticationContext("https://sts.example.com/adfs", false);
var token = ctx.AcquireToken(ClientResourceUri, ClientId, uc);
Run Code Online (Sandbox Code Playgroud)
对AcquireToken的调用引发异常...
' https://sts.example.com/adfs/ ' 不支持此方法重载
在不使用UserCredential对象的情况下调用AcquireToken,而是提供redirectUri可以工作,但是会引发一个对话框提示输入用户名和密码,这不适合,因为控制台应用程序将在非用户环境中执行...
var redirect = new Uri("https://example.com/arbitaryRedirect");
var token = ctx.AcquireToken(ClientResourceUri, ClientId, redirect);
//dialog is shown
Run Code Online (Sandbox Code Playgroud)
如果我切换到adal.net库的最新Alpha版本(3.6.212041202-alpha),该错误将更加明显...
MSIS9611:授权服务器不支持所请求的'grant_type'。授权服务器仅支持“ authorization_code”或“ refresh_token”作为授予类型。
但是,开采google的收益很少。
实际上可以针对ADFS进行静默身份验证吗?
我会基于基于其他帖子的回答而假设正确的方法是使用WsTrustChannelFactory来正确吗?
如果没有,最好的方法是什么?
继这个问题后,我希望autofac将声明对象的类型注入到我的NLog服务的构造函数中,以便它可以正确记录哪个类型是日志记录条目.
我的NLogService类看起来像这样......
public class NLogService : ILogService
{
private readonly Logger _logger;
public NLogService(Type t)
{
var consumerType = t.DeclaringType.FullName;
_logger = LogManager.GetLogger(consumerType);
}
Run Code Online (Sandbox Code Playgroud)
然而它在应用程序启动时失败,因为它显然无法解决注入NLogService的构造函数的内容,并出现以下错误...
可以使用可用的服务和参数调用在'MyProduct.Domain.Services.Logging.NLogService'类型上找到'公共绑定标志'的构造函数:无法解析构造函数'Void .ctor'的参数'System.Type t'(系统类型)'.
所以,我的问题是 - 如何指示autofac注入调用类的类型?
我试过这个......
public NLogService(Type t)
{
var method = MethodBase.GetCurrentMethod();
Type consumingType = method.DeclaringType;
var consumerType = consumingType.FullName;
var consumerType = t.DeclaringType.FullName;
_logger = LogManager.GetLogger(consumerType);
}
Run Code Online (Sandbox Code Playgroud)
但我最终还是结束了 MyProduct.Domain.Services.Logging.NLogService
我想要的是进行实际日志记录的类的类型.
我已经尝试过这个建议,它对我也没有用.
我们针对 Web 产品上开发的每个新功能进行分支,因此在 TFS 2010 中,文件夹结构看起来像这样......
$/Product/Mainline/...
$/Product/Branches/...
$/Product/Releases/...
$/Product/Merged Branches/...
Mainline 文件夹下只有 1 个解决方案,即“主干”。
分支包含作为开发中功能的主线分支。
合并的分支包含先前已合并回主线的分支。
Releases 包含了这一点——releases。合并到主线然后发布的分支。
一旦分支生命周期结束,我喜欢将它们存档在“合并分支”文件夹中,但是“移动”选项似乎永远不可用,它总是变灰。
来自 Vault 这是一种奇怪的行为,我总是可以移动 Vault 中的任何文件夹,无论我是否在本地拥有它。
此外,有时确实会出现这样的情况:如果该功能已被客户取消/搁置,我们会停止在某个分支上工作。显然分支的生命周期应该尽可能短,但这确实发生了并且能够移动分支似乎仍然是必要的。
我觉得我错过了有关工作区的一些东西?或者干脆你不打算移动分支,只需在它们合并到主线后删除它们。
有人经历过吗?或者对更好的实践有建议?
我有一个ASP.Net webforms应用程序,它使用Ninject 2.2.0.0
我有一个HTTPHandler,它继承自Microsoft.Web.ImageHandler类.
在其中我需要访问我创建的服务类的实例.
因为我不能从Ninject.Web.HttpHandlerBase继承我认为我只是将内核暴露为Global.asax类的属性...
protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel(new DefaultModule());
var sms = kernel.Get<SiteMapService>();
SiteMapSvc = sms;
Kernel = kernel;
return kernel;
}
public IKernel Kernel
{
get; set;
}
Run Code Online (Sandbox Code Playgroud)
并使用kernel.Get方法获取服务..
var global = (Global) HttpContext.Current.ApplicationInstance;
var service = global.Kernel.Get<PhotoService>();
Run Code Online (Sandbox Code Playgroud)
这失败了以下......
[ArgumentNullException: Cannot be null
Parameter name: root]
Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:258
Ninject.ResolutionExtensions.Get(IResolutionRoot root, Type service, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:151
Thumb.GenerateImage(NameValueCollection parameters) in …Run Code Online (Sandbox Code Playgroud) 我希望Ninject为实现通用接口的特定程序集中的所有类型创建Bindings,而不是在运行时全部指定它们.有点像开放式仿制药在Autofac中的运作方式.
这就是我想出来的......
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses()
.Where(t => t.IsAssignableFrom(
typeof(ICommandHandler<>)))
.BindAllInterfaces());
Run Code Online (Sandbox Code Playgroud)
调用下面的方法,我希望实现所有类型的数组,ICommandHandler<T>但它不产生任何...
public void Process<TCommand>(TCommand command)
where TCommand : ICommand
{
var handlers =
_kernel.GetAll<ICommandHandler<TCommand>>();
foreach(var handler in handlers)
{
handler.Handle(command);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有现成的方法来实现这一目标?或者我是否需要使用convention API自行推送?
这似乎是一种相当普遍的模式,并且想知道如果不编写自己的实现就可以实现这一点.
我试图做一个非常简单的实现,IUserStore基本上:
'|'如果有多个项目,则为pipe()).当我运行以下方法时:
[Fact]
public void Create_A_User()
{
// _session is a valid NHibernate ISession object
using (var userStore = new SimpleUserStore<SimpleIdentityUser>(_session))
using (var userManager = new UserManager<SimpleIdentityUser>(userStore))
{
var user = new SimpleIdentityUser
{
UserName = "kenny_mccormick",
RolesStr = "admin",
};
var createTask = userManager.CreateAsync(user, "the_password");
var result = createTask.Result; // this never finishes...
}
}
Run Code Online (Sandbox Code Playgroud)
最后一行永远不会完成执行.
奇怪的是,UserManager永远不会调用我的任何功能SimpleUserStore; 它在那之前就被卡住了.
以下是我定义的组件:
public class SimpleIdentityUser : IUser
{
public virtual …Run Code Online (Sandbox Code Playgroud) c# ×4
tfs ×3
autofac ×2
ninject ×2
tfs2010 ×2
.net ×1
adal ×1
adfs ×1
angular ×1
asp.net-4.0 ×1
asp.net-mvc ×1
async-await ×1
azure ×1
bitbucket ×1
generics ×1
httphandler ×1
jquery ×1
json ×1
linq ×1
mediatr ×1
msdeploy ×1
nlog ×1
nuget ×1
web-services ×1
webforms ×1