几周后,Visual Studio(2008 9.0.30729.1 SP)异常助手在使用C#IDE进行调试时出现了问题.相反,旧的丑陋和无用的调试对话框出现了:
为了确保,我检查了以下内容:
我怎样才能获得异常助理?谁给了我金色的小费?
我正在尝试调试一些使用反射来加载插件的代码
这是调试代码:
Type a = methodInfo.GetParameters()[0]
.ParameterType.BaseType;
Type b = typeof(MessageContext);
Debug.WriteLine(a.AssemblyQualifiedName);
Debug.WriteLine(b.AssemblyQualifiedName);
Debug.WriteLine(a.Equals(b));
Run Code Online (Sandbox Code Playgroud)
这是它的输出:
OrtzIRC.Common.MessageContext,OrtzIRC.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
OrtzIRC.Common.MessageContext,OrtzIRC.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
False
我不明白是什么让这两种类型不同?
大概2个月我一直在阅读这三个主题我能找到的所有东西,我还不确定我是否已经找到了.
依赖倒置原则.意味着你应该始终只依赖于接口而不是它们的实现.如果你的班级依赖于任何其他班级,这是不好的,因为它取决于第二类的细节.如果你的类依赖于接口,这绝对可以,因为这种依赖只意味着你的类需要一些抽象的东西,它可以做一些具体的事情而你并不真正关心它的做法.
由于"DIP"中的P代表"原理",我应该用这种方式定义:依赖性倒置原则是一个原则,要求所有代码的实体仅依赖于他们真正需要的细节.
通过"他们真正需要的细节",我指的是最简单的情况下的接口.我还使用"实体"这个词来强调DIP也适用于程序和其他任何东西,不仅适用于类.
依赖注入.它仅适用于启用DI的实体.启用DI的实体是一个"开放"的实体,用于配置其行为而不更改其内部.注入有两种基本类型(在谈论类时):
因此,定义可能如下:依赖注入是将"抽象细节"传递给真正需要这些细节的实体的过程.
通过"真正需要这些细节",我指的是最简单的情况下的接口."实体"一词一如既往地用来强调DI也适用于程序和其他任何东西.
控制反转.它通常被定义为"库和框架之间的差异","以程序编程中的任何一种方式编写程序"等等.这对我来说是最令人困惑的事情.我认为这里的主要想法只是启动任何行动.要么"随时随地"(程序方式)做某事,要么"等"直到有人问你(IoC方式).
我的定义是:IoC是程序执行流程的一个属性,当你不要做任何事情,直到他们要求你这样做.
这听起来就像"好莱坞原则",但我相信"好莱坞原则"和IoC都是完全相同的想法.
我理解吗?
architecture theory dependency-injection inversion-of-control
我们已经开始研究使用Windows Azure Service Bus作为我们当前队列的替代品,因为我们正朝着面向服务的架构迈进.
大多数文件都很清楚; 但是我很难确定哪种类型的序列化BrokeredMessage
在提供身体时使用.
例如,假设我实例化一个BrokeredMessage
对象如下:
ICommand sendMessageCommand = new SendMessageCommand
{
Title = "A new message title",
Body = "A new message body"
};
BrokeredMessage brokeredMessage = new BrokeredMessage(sendMessageCommand);
queueClient.Send(brokeredMessage);
Run Code Online (Sandbox Code Playgroud)
SendMessageCommand
是一个标有[Serializable]
属性的简单DTO ; 在我们的旧队列中,这是二进制序列化的,因此它可以更快地存储并保留其元数据.这对我们很重要,因为我们使用队列使用此处概述的模式发送命令,接收工作者角色使用泛型和动态类型的混合反序列化命令.
但是根据这篇文章,正文传递给了BrokeredMessage
"Binary XML Serialized" 的构造函数.我的假设是,这是标准的XML序列化,然后通过二进制格式化器,是正确的吗?
除此之外; 这是否意味着如果我要使用默认的BrokeredMessage
邮件正文功能; 我必须确保所有对象都是XML Serializable,包括所有出现的问题?(私有字段丢失,没有使用泛型反序列化的元数据,xml序列化属性)
最后; 如果是这样的话; 有一个简单的方法吗?我正在考虑做我们自己的二进制序列化,然后将byte[]
属性存储在BrokeredMessage
.
我正在使用Simple Injector和ASP.NET MVC项目.我添加了SimpleInjector.Integration.Web.Mvc
nuget包.这会SimpleInjectorInitializer
在App_Start
文件夹中添加类并初始化DI.代码看起来像
public static void Initialize()
{
// Did you know the container can diagnose your configuration?
// Go to: https://simpleinjector.org/diagnostics
var container = new Container();
//Container configuration code
DependencyResolver.SetResolver(
new SimpleInjectorDependencyResolver(container));
}
Run Code Online (Sandbox Code Playgroud)
这样可以正确配置MVC控制器的DI.
我的问题是,如果我想在任何controller\class中获取容器的实例来手动解决某些依赖,我该怎么办呢.
我之前曾在AutoFac上工作,它有一个依赖接口IComponentContext
,可以注入任何需要手动执行任何分辨率的类.
更新:
这是一个场景.我的控制器使用的服务初始化取决于在控制器方法中传递的输入参数,因此在构造期间不能实例化依赖性.
我知道这对于DI来说有点反模式,但是在很少的地方需要它,因此注入DI容器是下一个最好的事情.简单的注入器样本应该使用静态变量来共享我想要避免的容器,并且通过SimpleInjectorInitializer
工作方式也是不可能的.
使用此方法在MVC中查看模型:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx
在我的脑海里留下了一个悬而未决的问题.所以现在是我清理它的时候了.
如果我使用自动映射器将域属性映射到dto,那么我很欣赏当dto映射到保存的域实体时,我的域层可以返回一组验证规则.
但是,我没有看到一种干燥的方法来使客户端验证工作并将错误添加到模型状态,因此它们对应于视图模型上的正确属性.
干杯
我目前正在从我的项目中删除Ninject,并转向使用Simple Injector,但有一件事我无法正常工作.
对于我的日志记录,在注册服务时,我之前能够将参数传递到我的日志记录类中
_kernel.Bind<ILogger>().To<Logger>()
.WithConstructorArgument("name",
x => x.Request.ParentContext.Request.Service.FullName);
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种在Simple Injector中重新创建它的方法.到目前为止,我还有其他一切工作但是这个.我可以通过执行以下操作来使日志记录正常工作,尽管没有显示正确的记录器名称:
_container.Register<ILogger>(() => new Logger("test"));
Run Code Online (Sandbox Code Playgroud)
做任何类似事情的人都有经验吗?
是否有任何机构知道任何以统一方式执行异步任务的方式.我正在寻找一段时间,但却找不到任何办法.我正在尝试着色游戏,有一个泛洪填充算法,需要一些时间来处理.谢谢你的帮助.
我最近更新到OSx 10.10.2和Xcode 6.2.
我有一个我正在研究的Unity项目,我已经为iOS制作并通过iTunes连接发布了几十次.现在,在Xcode 6.2上,一旦我的项目进入Xcode,我就无法完成第一步.
即,Project-> Archive.我需要归档我的构建版本才能将其转换为iTunes Connect.但是,"存档"选项被禁用,显示为灰色.
如何归档我的构建?有没有新的工作流程来获取iTunes Connect?
谢谢!
我正在使用我的MVC 4应用程序中的工作单元和通用存储库模式.我试图解决的问题是为我系统中的每个实体创建Repository存根.为了利用Autofac Ioc,我必须为每个实体创建一个存储库类和接口,以便我可以在Autofac中注册它.
应用开始......
builder.RegisterType<SchoolDetailRepository>().As<ISchoolDetailRepository>().InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)
存储库类
public class SchoolDetailRepository : RepositoryBase<SchoolDetail>, ISchoolDetailRepository
{
public SchoolDetailRepository(IDatabaseFactory databaseFactory) : base(databaseFactory)
{
}
}
Run Code Online (Sandbox Code Playgroud)
接口
public interface ISchoolDetailRepository : IRepository<SchoolDetail>
{
}
Run Code Online (Sandbox Code Playgroud)
这似乎是很多额外的工作.
有没有办法注册Type的通用存储库而不是创建所有这些空类?
然后在我的服务类中,我可以通过Ioc将泛型类型传递给构造函数,例如...
public class SchoolService : ISchoolService
{
private readonly IRepository<SchoolDetail> _schoolRepository;
private readonly IUnitOfWork _unitOfWork;
public SchoolService(IRepository<SchoolDetail> schoolRepository, IUnitOfWork unitOfWork)
{
this._schoolRepository = schoolRepository;
this._unitOfWork = unitOfWork;
}
}
Run Code Online (Sandbox Code Playgroud)
容器配置
// Autofac iOC
var builder = new ContainerBuilder();
// register controllers
builder.RegisterControllers(Assembly.GetExecutingAssembly());
// register services
builder.RegisterType<MembershipService>().As<IMembershipService>().InstancePerHttpRequest();
builder.RegisterType<SchoolService>().As<ISchoolService>().InstancePerHttpRequest();
builder.RegisterType<StudentService>().As<IStudentService>().InstancePerHttpRequest();
builder.RegisterType<ClassRoomService>().As<IClassRoomService>().InstancePerHttpRequest(); …
Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×4
asp.net-mvc ×3
architecture ×1
asp.net ×1
asynchronous ×1
autofac ×1
automapper ×1
azure ×1
debugging ×1
exception ×1
ios ×1
itunes ×1
reflection ×1
theory ×1
xcode6 ×1