我正在使用Oracle提供程序实体框架(beta),我遇到了一个问题.
我们的表有Id列,在StoreGeneratedPattern中设置为Identity.我认为EF会自动执行"基础工作",例如创建序列,并为我添加到表中的每条记录获取新标识.但是当我运行代码来添加新记录时,例如:
var comment = new Comment
{
ComplaintId = _currentComplaintId,
Content = CommentContent.Text,
CreatedBy = CurrentUser.UserID,
CreatedDate = DateTime.Now
};
context.Comments.AddObject(comment);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
一个异常仍然会抛出,这是
{"ORA-00001:违反了唯一约束(ADMINMGR.CONSTRAINT_COMMENT)"}
(CONSTRAINT_COMMENT是约束要求注释标识必须是唯一的.
我该如何解决这个问题?
非常感谢你!
是否可以有条件地在其他组件的状态上注册组件?就像是:
ContainerBuilder.RegisterConditionally<T>(
Func<IComponentContext, bool>,
Func<IComponentContext, T>);
Run Code Online (Sandbox Code Playgroud)
我发现在autofac的V2之前,可以使用一个Register().OnlyIf()看起来像我正在寻找的结构.我希望此功能有条件地覆盖默认注册.
class CommonRegistrations
{
public virtual void Register(ContainderBuilder builder)
{
builder.Register(ctx => LoadSettings()).As<ISettings>().SingleInstance();
builder.RegisterType<DefaultFoo>().As<IFoo>();
}
}
class SpecificRegistrations : CommonRegistrations
{
public virtual void Register(ContainerBuilder builder)
{
base.Register(builder);
builder.ConditionalyRegister(
ctx => ctx.Resolve<ISettings>().ReallyUseSpecificFoo,
ctx => new SpecificFoo()).As<IFoo>();
}
}
...
var builder = new ContainerBuilder();
var registrations = new SpecificRegistrations();
registrations.Register(builder);
var container = builder.Build();
IFoo foo = container.Resolve<IFoo>();
Run Code Online (Sandbox Code Playgroud)
foo将根据ISettings.ReallyUseSpecificFoo实例DefaultFoo或实例SpecificFoo.
谢谢.
Funq IoC容器是否支持解析类型的所有注册?像这两个中的任何一个:
IEnumerable<IFoo> foos = container.Resolve<IEnumerable<IFoo>>();
IEnumerable<IFoo> foos = container.ResolveAll<IFoo>();
Run Code Online (Sandbox Code Playgroud) 抽象
在过去的几个月里,我一直在编写一个轻量级,基于C#的游戏引擎,它具有API抽象和实体/组件/脚本系统.它的整体想法是通过提供类似于Unity引擎的架构来简化XNA,SlimDX等游戏开发过程.
设计挑战
正如大多数游戏开发者所知,在整个代码中需要访问许多不同的服务.许多开发人员使用全局静态实例,例如渲染管理器(或作曲家),场景,图形设备(DX),记录器,输入状态,视口,窗口等.全局静态实例/单例有一些替代方法.一种是通过构造函数或构造函数/属性依赖注入(DI)为每个类提供它需要访问的类的实例,另一种是使用全局服务定位器,如StructureMap的ObjectFactory,其中服务定位器通常配置为一个IoC容器.
依赖注入
出于多种原因,我选择采用DI方式.最明显的一个是可测试性,通过对接口进行编程并具有通过构造函数提供给它们的每个类的所有依赖关系,这些类很容易测试,因为测试容器可以实例化所需的服务或它们的模拟,并输入到每个要测试的课程.进行DI/IoC的另一个原因是,不管你信不信,提高代码的可读性.没有更多的初始化过程实例化所有不同的服务,并通过引用所需服务手动实例化类.配置内核(NInject)/注册表(StructureMap)可以方便地为引擎/游戏提供单点配置,其中选择和配置服务实现.
我的问题
基本上做DI/IoC会大大降低我的工作效率,在某些情况下会进一步使代码和架构复杂化.因此,我不确定这是一条我应该遵循的道路,还是只是放弃并以老式的方式做事.我不是在寻找一个单一的答案,说明我应该或不应该做什么,而是讨论从长远来看使用DI是否值得,而不是使用全局静态/单一方式,可能的优点和缺点我忽略了处理DI时,上面列出的问题的可能解决方案.
我按照下面链接的示例来设置统一以使用我的服务层.我的项目设置与本文中的项目非常相似,我理解除了为什么在注册服务依赖项时使用PerThreadLifetimeManager的所有内容.请记住,我也在使用我的服务层中使用的通用存储库和单元工作.大多数统一示例使用默认(瞬态)生命周期管理器,因为我的设置类似于下面的设置,我想知道为什么我应该使用PerThreadLifeimeManager?我正在为我当前的表示层使用ASP.NET Web表单项目,如果它发生了任何变化.
container.RegisterType<ICatalogService, CatalogService>(new PerThreadLifetimeManager())
Run Code Online (Sandbox Code Playgroud)
dependency-injection unity-container unit-of-work object-lifetime repository-pattern
我是学生,我应该编写一个Android应用程序,可能是一个游戏.我有机会选择我的编程语言.我发现JAVA相当不错,但我更喜欢C#.但是,由于Android本身不支持C#,我正在寻找实现它的方法.
我已经为Xamarin找到了很多建议,但它并不是免费的.我理解,开发人员应该为他们的工作付钱,但由于我是学生并且不会从应用程序中获利,所以我付出任何代价似乎都是不公平的.我遇到了Unity,它是免费的,但与Xamarin相比,用户反馈很少.
所以,我想问你的建议 - Unity是否足够好,还是我应该牺牲一些钱并购买Xamarin?或者还有其他解决方案吗?
我尝试基于Java构建和应用程序.
对于依赖注入,我使用Google Guice.
现在我想出了在应用程序期间记录一些信息的问题.我不会以方法调用等方式谈论一般日志记录.我知道AOP,我可以像方法调用跟踪一样.
我要找的是手动记录.我需要一些方法来记录我的应用程序中的几乎每个类.所以我想到了两个选择:
那么从实际角度来看,最好的方法是什么?
我最近使用依赖注入模式和Autofac作为IoC容器.
通常,我会在核心应用程序(Winform,WCF,WPF等)中使用它.
目前我正在学习创建一个类库项目作为我的同行开发人员的框架,我倾向于坚持DI模式,因为它允许我进行单元测试.
如何在没有入口点的类库项目中配置IoC容器?
我应该做的事情如下:
public static void ConfigureLibrary() {
//.. Do bootstraping here
}
Run Code Online (Sandbox Code Playgroud)
并让核心应用程序在核心应用程序启动时调用它?
如何配置模式和实践企业库或Spring.Net的库?
.net c# dependency-injection class-library inversion-of-control
嗨,我一直在努力告诉Unity,如果它有多个实现,我希望它将它们注入不同的类中.这就是我的意思:
比方说,我有一个接口IProductCatalogService和两个实现
ProductCatalog : IProductCatalogService和ProductCatalogService : IProductCatalogService.
我如何告诉Unity,对于类AI,我希望在我的构造函数中传递一个类型的实例,ProductCatalog而对于Class B我想要一个实例ProductCatalogService.
我在ASP.NET Web API项目中使用Unity,并在中设置了解析器GLobalConfiguration.
对于简单的1对1注册,一切正常.
这是我尝试过但它似乎不起作用:
public class DependencyServiceModel
{
public Type From { get; set; }
public Type To { get; set; }
public IEnumerable<Type> ForClasses { get; set; }
}
public void RegisterTypeForSpecificClasses(DependencyServiceModel dependencyService)
{
foreach (var forClass in dependencyService.ForClasses)
{
string uniquename = Guid.NewGuid().ToString();
Container.RegisterType(dependencyService.From,
dependencyService.To, uniquename);
Container.RegisterType(forClass, uniquename,
new InjectionConstructor(
new ResolvedParameter(dependencyService.To)));
}
}
Run Code Online (Sandbox Code Playgroud)
在DependencyServiceModel …
c# ×7
.net ×3
android ×1
architecture ×1
autofac ×1
funq ×1
java ×1
logging ×1
ninject ×1
ora-00001 ×1
oracle ×1
structuremap ×1
unit-of-work ×1
xamarin ×1