也许这很容易,但在互联网上搜索已经让我头疼
这是问题所在:
interface IValidator
{
void Validate(object obj);
}
public class ValidatorA : IValidator
{
public void Validate(object obj) { }
}
public class ValidatorB : IValidator
{
public void Validate(object obj) { }
}
interface IClassA { }
interface IClassB { }
public class MyBaseClass
{
protected IValidator validator;
public void Validate()
{
validator.Validate(this);
}
}
public class ClassA : MyBaseClass, IClassA
{
//problem: validator should ValidatorA
public ClassA(IValidator validator) { }
}
public class ClassB : MyBaseClass, IClassB …Run Code Online (Sandbox Code Playgroud) 我读到使用Anko的最大好处是它的可重用性.但我找不到它的确切例子.
目前在新的Android布局系统中,锅炉板如下:
DrawerLayout (with some setup)
CoordinatorLayout (with some setup)
AppBarLayout (with some setup)
ToolBar
<The Main Content>
NavigationView (with header inflated)
Run Code Online (Sandbox Code Playgroud)
从上面的布局结构来看,只有<The Main Content>varry.在许多情况下,这些仪式设置几乎在每个活动中都重复.
所以在这里,Anko正在考虑是否有关于该问题的可重用解决方案.我不期望它可以重复用于通用布局,但至少我可以最小化项目中的仪式代码.也许我需要这样的东西:
class MainUI: AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>): View{
return with(ui) {
myCustomRootLayout {
//here is what <The Main Content> will be
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码我期望myCustomRootLayout将完成根布局的所有仪式设置,如(DrawerLayout,CoordinatorLayout等).
那可能吗?
编辑 所以我认为我的问题是:如何制作一个可以托管其他组件的自定义组件
这是在C#中:
private static readonly ILog log = LogManager.GetLogger(typeof (MyClass));
Run Code Online (Sandbox Code Playgroud)
不仅在C#中,而且我看到了同样的另一种语言......有什么想法吗?
这应该是一个普遍的问题,我已经搜索但是还没有找到任何解决方案,如果它是一个骗局,请指出我适当的链接.
所以,我有一个通用的存储库来支持几个entites,我暂时注册它如下:
public class ExpensiveServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
Register<EntityA>(container);
Register<EntityB>(container);
//etc etc
//when there is a new one should register it manually
}
void Register<T>(IWindsorContainer container) where T : Entity
{
container.Register(Component.For<IRepository<T>>()
.ImplementedBy<Repository<T>>()
.LifeStyle.Transient);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
位于Repositories命名空间
上的存储库位于命名空间上的实体Entities,包括Entity所有实体的基类
它工作正常,但我认为它应该是一种更好的方式,按惯例使用注册的更自动的方式,所以当我在我的项目中添加一个新实体时,windsor将自动识别它,并为它注册存储库.还有一个问题,如何忽略Entity(基类)所以它没有在容器上注册.
问候
我发现这个文档解释了如何将匿名用户与新注册用户联系起来,但我不明白它是如何工作的。
从这里也找到的解释中,我得到了如下的大图(如果我错了,请纠正我):
ANONYM-USER-UID数据
-- shoppingCart
-- ANONYM-USER-UID
-- <push-id>
-- itemUid: <item-uid>
-- count: 2
-- <push-id>
-- itemUid: <other-item-uid>
-- count: 1
-- OTHER-USER-UID
-- .......
Run Code Online (Sandbox Code Playgroud)
规则:只有合适的 UserId 才能访问购物车
"rules": {
"shoppingCart" {
"$userUid": {
".read": "auth.uid == $userUid"
}
}
}
Run Code Online (Sandbox Code Playgroud)
AuthCredential然后检索然后linkWithCredential调用。例如,用户比使用新的 userUIDREGISTERED-USER-UID问题是,每当客户端代码查询shoppingCart/REGISTERED-USER-UID时,它都会检索shoppingCart/ANONYM-USER-UID? 规则会允许吗?
如果应用更复杂的规则会怎样,例如,规则变为 -只有适当的 UserId 可以访问购物车,但 userUid 不能在 blackList child 中。
"rules": { …Run Code Online (Sandbox Code Playgroud)