标签: composition

是否可以参数化MEF导入?

我对MEF比较新,所以我不完全了解这些功能.我正在尝试实现与Unity的InjectionMember类似的功能.

假设我有一个导入MEF部件的类.为简单起见,我们将以下类作为导出部分的示例.

[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class Logger {

    public string Category {
        get;
        set;
    }

    public void Write(string text) {
    }

}

public class MyViewModel {

    [Import]
    public Logger Log {
        get;
        set;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我想弄清楚的是,是否可以在导入时为Category属性指定值.就像是:

public class MyViewModel {

    [MyImportAttribute(Category="MyCategory")]
    public Logger Log {
        get;
        set;
    }

}

public class MyOtherViewModel {

    [MyImportAttribute(Category="MyOtherCategory")]
    public Logger Log {
        get;
        set;
    }

}
Run Code Online (Sandbox Code Playgroud)

目前,我正在做的是实现IPartImportsSatisfiedNotification并在代码中设置Category.但显然我宁愿把一切都整齐地放在一个地方.

.net mef composition

4
推荐指数
1
解决办法
1611
查看次数

在红宝石中使用成分

我是新Ruby,但一年多来都是.net开发者.我希望在我的几个模型中实现组合,以确保它们尽可能松散耦合,但不知道从哪里开始,或者如果这是真的需要,我仍然在考虑像.net dev.

任何人都可以给我一些指示从哪里开始.

干杯科林G.

ruby composite composition

4
推荐指数
1
解决办法
1762
查看次数

Perl类的属性组成?

假设我有多个角色,每个角色定义一组项目:

package A;
use Moose::Role;
sub items () { qw/apple orange/ }

package B;
use Moose::Role;
with 'A';
sub items () { qw/watermelon/ }

package C;
use Moose::Role;
sub items () { qw/banana/ }
Run Code Online (Sandbox Code Playgroud)

假设我在另一个类中使用它们,我想收集所有这些项目:

package Foo;
use Moose;
with qw(B C);

sub do_something {
    my $self = shift;
    my @items = ???;   # How can I get apple, orange, watermelon, banana here?
    ....
}
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方案是采用MooseX :: ComposedBehavior,但是它的POD说(当然在编写时)它的API"不太稳定",而且"当前的实现是一种破解,应该被替换通过更健壮的一个".因此,我正在调查这是否可以在不依赖于这种"黑客"的情况下完成.

警告:如果您将来阅读此内容,请查看MooseX :: ComposedBehavior的POD (当前版本:0.003),因为它可能在平均时间内发生了变化.事情变化很快.CPAN作者发布了新版本.目前"不太稳定"的东西可能在未来变得更加稳定.甚至可能还有其他模块.自行检查.

理想情况下应该有类似的东西:my @items …

perl moose composition collect class-attributes

4
推荐指数
2
解决办法
673
查看次数

如何将Facelets组合与来自其他上下文的文件一起使用

我有一个使用组合的应用程序(用于页面模板).但我们认为创建一个Web应用程序(战争)来托管所有应用程序在同一主机中共享的所有模板.

如何从其他上下文中包含模板?这时我使用从http请求导入.但这听起来很糟糕.

<ui:composition template="http://localhost:8080/templates/layout/foo.xhtml">

我正在使用JBoss Seam 2.x和JSF 1.

jsf facelets composition

4
推荐指数
1
解决办法
6269
查看次数

OOP哲学(Scala编程中的组合和继承的摘录)

在Scala编程中,第239页,第一段说:

组合和继承是根据另一个现有类定义新类的两种方法.如果你所追求的主要是代码重用,你通常应该更喜欢组合继承.只有继承会受到脆弱的基类问题的困扰,在这个问题中,你可以通过更改超类来无意中破坏子类.

对我来说还不清楚.任何人都可以展示这种情况的一个例子,最好有一些代码吗?

architecture oop inheritance scala composition

4
推荐指数
1
解决办法
226
查看次数

使用Perl的OO设计模式

我目前正计划设计一个新系统,我需要编写与后端API交互的代码.我正在考虑对象组合和继承,并决定在我的情况下最正确的程序是使用组合而不是继承,因为我的对象彼此之间具有"有"关系而不是"是".

我现在发现,虽然因为某些对象依赖于其他对象,所以可能存在"对象A"具有属性"对象B"和属性"对象C"的情况 - 然而"对象B"也具有属性"对象" C".

希望这个类比更有意义:

假设我有一家公司销售包含猫和放射性物质的盒子,这些盒子可能会或可能永远不会反应:

我把我的产品卖给了组织.用户通过指定他们所属的组织向我注册.组织可能有许多用户或没有用户.用户必须拥有其所属的组织.我跟踪我的产品(作为一个实体的盒子,作为一个实体的猫)以及它们属于哪个组织.我还跟踪猫和他们所在的箱子.一个组织可能有许多箱子,其中任何一个都有许多猫.盒子可能是空的.一些用户可以购买新的盒子,而其他用户只能看到它们.

身份验证和授权都由我与之交互的API管理.

对象关系:

$user has a => $organization that it belongs to

$user has a => $role that dictates what it may or may not do.

$box has a => $organization that it belongs to
Run Code Online (Sandbox Code Playgroud)

现在:

$cat has a => $box that it belongs to 
Run Code Online (Sandbox Code Playgroud)

$cat has a => $organization that it belongs to ?
Run Code Online (Sandbox Code Playgroud)

要么

$cat has a => $box that it belongs to WHICH has a => $organization that it …
Run Code Online (Sandbox Code Playgroud)

model-view-controller perl moose catalyst composition

4
推荐指数
1
解决办法
322
查看次数

haskell中的功能组合

怎么不能做到

fst . fst (("Bob",12),10)
Run Code Online (Sandbox Code Playgroud)

在哈斯克尔?

:t fst . fst
Prelude> ((c,b),b1) -> c
Run Code Online (Sandbox Code Playgroud)

这不会使(("Bob",12),10)成为fst的一个很好的候选人.fst,因为它

(([Char],Integer),Integer)
Run Code Online (Sandbox Code Playgroud)

haskell composition

4
推荐指数
1
解决办法
140
查看次数

有没有办法访问对象内的对象?

我正在通过构建一个简单的目录来练习java.我有4个课程.这些是:

  1. 地址

  2. 联系

  3. 识别TestClass

我已经完成了这个系统的创建,它按照我想要的方式工作.我通过为Person,Address和Contact制作3个不同的数组来做到这一点.要将Person,Address和Contact链接在一起,我将它们放在具有相同索引号的相应数组上.(不是将它们链接在一起,只是一种在编辑人员时知道要访问哪个地址或联系人的方法).

但现在,我想优化它.我想创建一个HashMap来保存一个人,其中包含地址和联系人.请参阅下面的代码以获取更多信息.

Person.class

public class Person {
private long Id;
private firtName;
private Address address;
private Contact contact;

//some setter and getter methods

public Person(Address address, Contact contact) {
this.address = address;
this.contact = contact;
}
}
Run Code Online (Sandbox Code Playgroud)

Address.class

public class Address {

private String street;
private String city;
private String province;


//some setter and getter methods
}
Run Code Online (Sandbox Code Playgroud)

Contact.class

public class Contact {

private long Phone;
private String Email;

//some setter and getter methods
}
Run Code Online (Sandbox Code Playgroud)

testClass.class …

java hashmap composition

4
推荐指数
1
解决办法
5532
查看次数

在Elm Architecture中编写程序

假设我想创建一个包含两个组件的网页,比如a Navbar和a Body.这两个组件不相互作用,可以独立开发.所以,我有两个榆树文件,每个文件都有以下组件:

type Model = ...

type Msg = ...

init : (Model, Cmd Msg)

update : Msg -> Model -> (Model, Cmd Msg)

view : Model -> Html Msg
Run Code Online (Sandbox Code Playgroud)

假设它们都工作正常,我们如何组合它们来制作一个包含这两个组件的程序?

我试着写这样的东西:

type Model = {body : Body.Model , navbar : Navbar.Model}
type Msg = BodyMsg Body.Msg | NavbarMsg Navbar.Msg

view : Model -> Html Msg
view model = div [] [Body.view model.body, Navbar.view model.navbar]

update : Msg -> Model -> (Model, Cmd Msg)
update = ... …
Run Code Online (Sandbox Code Playgroud)

composition elm elm-architecture

4
推荐指数
2
解决办法
353
查看次数

Scala中依赖注入的阅读器的组成

这是一个简单的服务示例,其方法返回reader:

trait Service1_1{
  def s1f1:Reader[Map[String,Int],Int] =
    Reader(_("name"))

  def s1f2:Reader[Map[String,Int],Int] =
    Reader(_("age"))
}
Run Code Online (Sandbox Code Playgroud)

这是一个服务使用者,它接受参数,映射并返回读取器本身:

trait Service1_2 {
  def s12f1(i:Int, map:Map[String,Int]):Reader[Service1_1, Int] =
    Reader(s => {
      val r = for {
        r1 <- s.s1f1
        r2 <- s.s1f2
      } yield r1 + r2
      r.run(map) + i
    })
}
Run Code Online (Sandbox Code Playgroud)

好的,要使用Service1_2.s12f1,我必须在参数列表中具有map:

object s1 extends Service1_1
object s2 extends Service1_2
val r = s2.s12f1(3, Map("age"-> 1, "name"-> 2)).run(s1)
Run Code Online (Sandbox Code Playgroud)

问题:如何实施Service1_2.s12f2

trait Service1_2 {
  def s2f2 = ???
}
Run Code Online (Sandbox Code Playgroud)

为了能够像这样运行它:

s2.s2f2(2)
  .run(s1)
  .run(Map("age"-> 1, "name"-> 2)) …
Run Code Online (Sandbox Code Playgroud)

dependency-injection scala composition reader-monad scala-cats

4
推荐指数
1
解决办法
212
查看次数