http://msdn.microsoft.com/en-us/library/system.runtime.remoting.proxies.realproxy.gettransparentproxy%28v=VS.100%29.aspx上的文档未指明GetTransparentProxy将返回的方案null,但是null当我打电话给我时我会回来的.
什么情况会导致这种行为?
我刚刚创建了一个代理模型,并且惊讶于manage.py makemigrations创建了一个带有migrations.CreateModel操作的新迁移文件.
代理模型不会创建新的数据库表,它只是同一数据集的不同python接口,并且实际上不manage.py sqlmigrate my_app_label 0042返回任何内容.
我认为它可能用于创建代理模型,ContentType但如果它们不存在则按需创建.
它是否用于触发代理模型权限的创建?代理模型权限有一个6岁的开放式bug,所以我不确定这个部分应该如何工作...
它用来Django 1.8测试这个.
编辑:澄清一下,Django创建一个对新代理模型没有任何作用的迁移,所以Django如果它没有用,我们不想在第一时间创建迁移吗?
是否存在迁移有用的用例?
首先,我们有一个应用程序,其中有一些模型代表我们的票务支持系统Kayako的模型.此应用程序不应该知道有关使用它的其他应用程序的任何信息,并且应尽可能保持通用.由于此应用程序使用Kayako的现有表,因此我们将它运行在同一个数据库中.我们称这个应用程序kayakodb.
一个应用程序将客户数据库中的客户链接到票证支持系统中的票证.以前,这个系统有自己的票证支持系统内的票证表示,使用提供的API查询票证kayakodb.然后,它使用此票证表示将客户和域链接到.然而,这太复杂而且不太符合逻辑.因此,我们选择将其切换为代理模型,并将表示客户和域链接的模型移动到kayakodb.我们称这个应用程序sidebar.
另一个新的应用程序显示来自票务支持系统的票据,并在电话中清晰地显示,因此我们的支持部门可以轻松查看哪些电话和票证与哪些客户相关.该系统具有代理模型的代理模型sidebar,因为sidebar该应用程序还需要该模型提供的某些功能以及新代理模型声明的其他一些功能.我们称之为这个项目WOW.
在sidebar和WOW应用程序是相同的项目/库的两个组成部分.我们将此存储库称为Coneybeach具有自己的数据库.但是,这kayakodb是一个完全不相关的项目.它Coneybeach通过我们安装的需求文件包含在内pip.
kayakodb这当然是不行的.任何时候我们安装它的新版本kayakodb都会覆盖此迁移.更不用说kayakodb不应该知道哪些模型使用它的事实.
Ticket里面
的模型kayakodb:
class Ticket(models.Model):
"""
This model is a representation of the data stored in the "kayako" database table "swtickets". Minus a lot of stuff
we don't use. If you add a field make sure it …Run Code Online (Sandbox Code Playgroud) 一个例子最好地解释了:
public interface IA {
void foo();
void bar();
}
public class A : IA {
public virtual void foo(){
Console.Write("foo");
bar(); //call virtual method
}
public virtual void bar(){
Console.Write("bar");
}
}
public class Interceptor : IInterceptor {
public void Intercept(IInvocation invocation)
{
Console.WriteLine("Intercepted: " + invocation.Method.Name);
invocation.Proceed();
}
}
Main(){
IA a = new A();
//proxy-ing an interface, given an implementation
IA proxy = new Castle.DynamicProxy.ProxyGenerator()
.CreateInterfaceProxyWithTarget(a, new Interceptor());
proxy.foo();
}
Run Code Online (Sandbox Code Playgroud)
我原本期望输出:
Intercepted foo
foo
Intercepted bar
bar …Run Code Online (Sandbox Code Playgroud) 我们最近升级了AutoMapper,并在以某种方式映射项目时遇到了问题.
当我加载NHibernate域对象,并尝试以下列方式将我的模型映射到它:
var myPoco = new MyPoco();
var proxy = repository.Load<MyDomainObject>(id);
Mapper.Map(myPoco, proxy);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Missing type map configuration or unsupported mapping.
MyPoco-> MyDomainObjectProxy
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用方法的以下重载,我不会得到异常:
var myDomainObj = Mapper.Map<MyPoco, MyDomainObject>(myPoco);
Run Code Online (Sandbox Code Playgroud)
当您查看AutoMapper代码时,您可以看到这些方法在代码库中调用不同的基本方法,这就是它们表现不同的原因.
这是较新版本的AutoMapper的错误,还是有另一种方法使用Mapper.Map(源,目标)方法与代理?
注意:这是使用AutoMapper 2.2.0.我相信这在0.3中运行良好.
它是众所周知的是std::vector<bool>不符合标准的容器的需求,主要是因为打包表示防止T* x = &v[i]从一个指针返回一个布尔值.
我的问题是:当reference_proxy重载address-of operator&以返回pointer_proxy 时,这可以得到补救/缓解吗?
在大多数实现中,指针代理可以包含与reference_proxy相同的数据,即指向打包数据的指针和用于隔离指向的块内的特定位的掩码.然后,pointer_proxy的间接将产生reference_proxy.基本上两个代理都是"胖"指针,然而,与基于磁盘的代理容器相比,这些指针仍然相当轻.
而不是T* x = &v[0]一个会然后做auto x = &v[0],并使用x像if(*x)没有问题.我也希望能够写作for(auto b: v) { /* ... */ }
问题:这种多代理方法是否适用于STL的算法?或者某些算法真的依赖于x需要真实的需求bool*?或者是否有太多连续的用户定义转换需要阻止它工作?在尝试完全完成上述实施草图之前,我想知道任何这样的障碍物.
更新(基于@HowardHinnant的回答和关于comp.std.c ++的古老讨论)
你可以在很大程度上模仿内置类型:对于任何给定的类型T,一对代理(例如reference_proxy和iterator_proxy)可以在reference_proxy :: operator&()和iterator_proxy :: operator*的意义上相互一致. ()是彼此相反的.
但是,在某些时候,需要将代理对象映射回来以表现为T*或T&.对于迭代器代理,可以重载operator - >()并访问模板T的接口,而无需重新实现所有功能.但是,对于参考代理,您需要重载operator.(),这在当前C++中是不允许的(尽管Sebastian Redl在BoostCon 2013上提出了这样的提议).您可以像引用代理中的.get()成员一样进行冗长的解决方法,或者在引用中实现所有T的接口(这是对vector :: bit_reference所做的),但这会丢失内置语法或引入用户定义的转换,这些转换没有用于类型转换的内置语义(每个参数最多只能有一个用户定义的转换).
我创建了一个带有"apply"陷阱的Proxy对象:
var target = {},
handler = { apply: () => 42 }
proxy = new Proxy(target, handler);
Run Code Online (Sandbox Code Playgroud)
因此,Proxy对象应该是可调用的.但是,它不起作用:
proxy(); // TypeError: proxy is not a function
Run Code Online (Sandbox Code Playgroud)
为什么?
今天我遇到了这个问题,这真的让我烦恼,因为几乎代码已经运行了(并且即使在恢复到旧版本之后也停止了工作).
我正在Facelets-Page上访问一个Spring-Bean.Spring在Proxies中包装这些对象以使用方面和其他一些东西.
问题是,我在尝试访问bean的属性时遇到异常.例外是这样的:
javax.el.PropertyNotFoundException: /customers.xhtml @23,27 value="#{customerBean.customer}": Property 'customer' not found on type $Proxy88
Run Code Online (Sandbox Code Playgroud)
我肯定知道(!!)有相应的getter/setter方法.到目前为止我尝试的事情:
无论我做什么,类都不正确地被类加载器正确包装或者没有正确加载.
有谁知道什么可能导致像这样的问题?我不知道该怎么做,所以任何建议都非常感谢!
提前致谢!
问候,罗伯特
我正在使用NHibernate(2.0.1.4)与NHibernate.Linq(1.0.0.4)从数据库中获取Node类型的对象.
当我得到这些对象时,我得到的集合的最后一个对象是Proxy类型(因为我使用了"NHibernate.ByteCode.LinFu"")
我使用了以下linq查询:
var mynodes = from node in session.Linq<Node>() where ancestorNodes.Contains(node.Id) select node).ToList()
Run Code Online (Sandbox Code Playgroud)
anchestorNodes是要获取的节点对象的Id列表.
当我在"ancestorNodes"列表中有3个id时,我从查询中获得的结果(mynodes)的最后一个对象是nodeProxy类型.
怎么会这样?为什么它总是最后一个对象?我怎么解决这个问题?
我有下面这段代码,作为一个例子,dec_proxy尝试将增量运算符的效果反转到在复杂函数调用foo中执行的类型 - 顺便说一下我无法更改接口.
#include <iostream>
template<typename T>
class dec_proxy
{
public:
dec_proxy(T& t)
:t_(t)
{}
dec_proxy<T>& operator++()
{
--t_;
return *this;
}
private:
T& t_;
};
template<typename T, typename S, typename R>
void foo(T& t, S& s, R& r)
{
++t;
++s;
++r;
}
int main()
{
int i = 0;
double j = 0;
short k = 0;
dec_proxy<int> dp1(i);
dec_proxy<double> dp2(j);
dec_proxy<short> dp3(k);
foo(dp1,dp2,dp3);
//foo(dec_proxy<int>(i), <---- Gives an error
// dec_proxy<double>(j), <---- Gives an error
// dec_proxy<short>(k)); <---- …Run Code Online (Sandbox Code Playgroud) proxy-classes ×10
c# ×4
c++ ×2
django ×2
python ×2
.net ×1
automapper ×1
bitvector ×1
classloader ×1
containers ×1
ecmascript-6 ×1
facade ×1
function ×1
java ×1
javascript ×1
nhibernate ×1
realproxy ×1
spring ×1
stl ×1
tomcat7 ×1