我对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.但显然我宁愿把一切都整齐地放在一个地方.
我是新Ruby,但一年多来都是.net开发者.我希望在我的几个模型中实现组合,以确保它们尽可能松散耦合,但不知道从哪里开始,或者如果这是真的需要,我仍然在考虑像.net dev.
任何人都可以给我一些指示从哪里开始.
干杯科林G.
假设我有多个角色,每个角色定义一组项目:
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 …
我有一个使用组合的应用程序(用于页面模板).但我们认为创建一个Web应用程序(战争)来托管所有应用程序在同一主机中共享的所有模板.
如何从其他上下文中包含模板?这时我使用从http请求导入.但这听起来很糟糕.
<ui:composition template="http://localhost:8080/templates/layout/foo.xhtml">
我正在使用JBoss Seam 2.x和JSF 1.
在Scala编程中,第239页,第一段说:
组合和继承是根据另一个现有类定义新类的两种方法.如果你所追求的主要是代码重用,你通常应该更喜欢组合继承.只有继承会受到脆弱的基类问题的困扰,在这个问题中,你可以通过更改超类来无意中破坏子类.
对我来说还不清楚.任何人都可以展示这种情况的一个例子,最好有一些代码吗?
我目前正计划设计一个新系统,我需要编写与后端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) 怎么不能做到
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) 我正在通过构建一个简单的目录来练习java.我有4个课程.这些是:
人
地址
联系
识别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 …
假设我想创建一个包含两个组件的网页,比如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) 这是一个简单的服务示例,其方法返回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
composition ×10
moose ×2
perl ×2
scala ×2
.net ×1
architecture ×1
catalyst ×1
collect ×1
composite ×1
elm ×1
facelets ×1
hashmap ×1
haskell ×1
inheritance ×1
java ×1
jsf ×1
mef ×1
oop ×1
reader-monad ×1
ruby ×1
scala-cats ×1